• 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ę

Object Storage Arubacloud
0 głosów
174 wizyt
pytanie zadane 28 sierpnia 2023 w Systemy operacyjne, programy przez Niepokonana7999 Bywalec (2,270 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 Ekspert (344,860 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,270 p.)
a gdzie tu jest konwersja

2 odpowiedzi

+2 głosów
odpowiedź 28 sierpnia 2023 przez Oscar Nałogowiec (29,320 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,270 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 Ekspert (344,860 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,280 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 (253,400 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ź 415 wizyt
pytanie zadane 30 grudnia 2018 w C i C++ przez robertwe Gaduła (4,620 p.)
0 głosów
1 odpowiedź 1,977 wizyt
pytanie zadane 18 grudnia 2016 w C i C++ przez Jan Dobrakowski Użytkownik (580 p.)
0 głosów
1 odpowiedź 241 wizyt

92,579 zapytań

141,429 odpowiedzi

319,657 komentarzy

61,963 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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...