• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

java typy long i int nie kompiluje się

Cloud VPS
0 głosów
492 wizyt
pytanie zadane 28 sierpnia 2023 w Systemy operacyjne, programy przez Niepokonana7999 Bywalec (2,310 p.)

Proszę o odpowiedź dlaczego jak dam wszędzie long to to się nie kompiluje a jak wszędzie int to się kompiluje.

Program ma przemnożyć przez siebie liczby z tabeli, ale tylko te nieparzyste.

public class liczby {

    public static void main(String[] args){

        long[] liczby={4, 5, 6, 13, 8, 25, 17, 99, 30, 45, 40, 137, 55, 49, 13}; //tak sie koduje tablice
        long ile=1;
        for (long i=0; i<liczby.length; i++){
            if( liczby[i]%2==0) continue;
            ile=ile*liczby[i];
        }
        System.out.println(ile);


    }
}

 

1
komentarz 28 sierpnia 2023 przez adrian17 Mentor (354,180 p.)

No, ale kompilator mówi dokładnie czemu to się dzieje.

<source>:8: error: incompatible types: possible lossy conversion from long to int
            if( liczby[i]%2==0) continue;
                       ^
<source>:9: error: incompatible types: possible lossy conversion from long to int
            ile=ile*liczby[i];
komentarz 28 sierpnia 2023 przez Niepokonana7999 Bywalec (2,310 p.)
a gdzie tu jest konwersja

2 odpowiedzi

+2 głosów
odpowiedź 28 sierpnia 2023 przez Oscar Nałogowiec (29,360 p.)
Mógłby dać jakiś komunikat błędu, nie mamy tutaj szklanej kuli.

Zgaduje że przyczyną jest to - że indeksem tablicy musi być maksymalnie int. Dlaczego iterujesz pętle long-iem - tablica jest aż tak długa?
komentarz 28 sierpnia 2023 przez Niepokonana7999 Bywalec (2,310 p.)
Kodem błędu było to, że nie można tak po prostu konwertować między int a long, a tu konwersji nie ma.
3
komentarz 28 sierpnia 2023 przez adrian17 Mentor (354,180 p.)
Jest konwersja, po prostu cicha - bo indeksuje się intami. Gdyby to nie była cicha konwersja, to by nie narzekał.
2
komentarz 28 sierpnia 2023 przez mbabane Szeryf (79,260 p.)

Wartość int zawiera się w long stąd np. taki zapis będzie poprawny:

int a = 5;
long b = a;

jest ok,

Jednak odwrotnie już nie całkiem bo long jest większy od int, stąd jeśli to konieczne trzeba jawnie powiedzieć (rzutować - swoją drogą kto wymyślił polską nawę) że świadomie zmienia się long'a na int'a (i to chyba powoduje warrning podczas kompilacji):

long a = 1;
int b = (long) a;

Dodatkowo, każda liczba zapisana bezpośrednio w kodzie (jak powyżej wartość 1 - magic number) jest dla javy int-em, co powoduje że jeśli wartość wykroczy poza int'a trzeba dodać na końcu literę L:

long a = 1111111111111111111111L; // bez L się nie skompiluje

 

+1 głos
odpowiedź 28 sierpnia 2023 przez VBService Ekspert (256,600 p.)

Sprawdź: Can you index an array with a long int?

10.4. Array Access

 

Arrays must be indexed by int values; shortbyte, or char values may also be used as index values because they are subjected to unary numeric promotion (§5.6.1) and become int values.

An attempt to access an array component with a long index value results in a compile-time error.

Podobne pytania

0 głosów
1 odpowiedź 689 wizyt
pytanie zadane 30 grudnia 2018 w C i C++ przez robertwe Gaduła (4,620 p.)
0 głosów
1 odpowiedź 2,280 wizyt
pytanie zadane 18 grudnia 2016 w C i C++ przez Jan Dobrakowski Użytkownik (580 p.)
0 głosów
1 odpowiedź 370 wizyt

93,469 zapytań

142,404 odpowiedzi

322,716 komentarzy

62,852 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...