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

Java - Random nie losuje liczb

Object Storage Arubacloud
0 głosów
249 wizyt
pytanie zadane 21 maja 2021 w Java przez Fishu Nowicjusz (150 p.)

Z jakiegoś powodu Random nie losuje mi liczb. Kiedy wypisuję elementy do konsoli pokazuje wszędzie null gdzie powinny być wylosowane elementy. Już robiłem praktycznie identyczny program i wszystko działało jak powinno (sprawdzałem z tamtym kodem i mam wszystko tak samo). Oto kod:

Main:

import java.util.Random;
import java.lang.Math;

public class Main
{
    static void clear()
    {
        for(int i=0; i<50; i++)
        {
            System.out.println();
        }
    }

    public static void main(String[] args)
    {
        int losSamolotu=0;
        int losLotniska1=0;
        int losLotniska2=0;
        double odleglosc=0;

        Samoloty[] samolot = new Samoloty[100];
        samolot[1] = new Samoloty("Daher TBM-930", 2430, 150);

        Lotniska[] lotnisko = new Lotniska[100];
        lotnisko[1] = new Lotniska("EPKT", "Katowice - Pyrzowice", 50.48, 19.08, 10495);
        lotnisko[2] = new Lotniska("EPKK", "Krakow - Balice",      50.08, 19.78, 8359);

        Random r=new Random();
        losSamolotu=r.nextInt(1)+1;
        do
        {
            losLotniska1=r.nextInt(2)+1;
            losLotniska2=r.nextInt(2)+1;
            odleglosc=Math.acos(Math.sin(Math.toRadians(lotnisko[losLotniska1].X))*Math.sin(Math.toRadians(lotnisko[losLotniska2].X))+Math.cos(Math.toRadians(lotnisko[losLotniska1].X))*Math.cos(Math.toRadians(lotnisko[losLotniska2].Y-lotnisko[losLotniska1].Y)))*6371*0.621;
        }
        while(losLotniska1==losLotniska2 || odleglosc>samolot[losSamolotu].zasieg);

        System.out.println(samolot[losSamolotu].nazwa);
        System.out.println(lotnisko[losLotniska1].ICAO + " - " + lotnisko[losLotniska1].nazwa);
        System.out.println(lotnisko[losLotniska2].ICAO + " - " + lotnisko[losLotniska2].nazwa);
        System.out.println(odleglosc + "NM");

    }
}

Samoloty:

public class Samoloty
{
    String nazwa;
    int rozbieg;
    int zasieg;

    Samoloty(String sNazwa, int sRozbieg, int sZasieg)
    {
        sNazwa=nazwa;
        sRozbieg=rozbieg;
        sZasieg=zasieg;
    }
}

Lotniska:

public class Lotniska
{
    String ICAO;
    String nazwa;
    double X;
    double Y;
    int dlPasa;

    Lotniska(String lICAO, String lNazwa, double lX, double lY, int lDlPasa)
    {
        lICAO=ICAO;
        lNazwa=nazwa;
        lX=X;
        lY=Y;
        lDlPasa=dlPasa;
    }
}

Używam IntelliJ IDEA a w starym programie używałem Eclipse o ile to ma jakieś znaczenie.

2
komentarz 21 maja 2021 przez Oscar Nałogowiec (29,290 p.)
W konstruktorach klas Lotniska i Samoloty masz przypisania wartości w niewłaściwą stronę, czyli praktycznie nie inicjalizujesz pól.

Trochę poza tematem:

Pozycje geograficzną podaję się jako długość i szerokość geograficzną (longitude, latitude) a nie X i Y. Tak wszyscy są przyzwyczajeni - X,Y będzie mylące.

W w symulatorze lotu FGFS (open source) jest plik zawierający dane, w tym współrzędne, chyba wszystkich lotnisk na świecie.
1
komentarz 21 maja 2021 przez Fishu Nowicjusz (150 p.)
Wszystko działa, wielkie dzięki za pomoc.

Pozdrawiam :)

1 odpowiedź

0 głosów
odpowiedź 21 maja 2021 przez Wiciorny Ekspert (269,710 p.)

Konstruktor. Pomijam fakt, że jest pakietowy- a jak już używasz klasy publicznej to przemyśl czy jest sens go określać z dostępem pakietowym 

   Lotniska(String lICAO, String lNazwa, double lX, double lY, int lDlPasa)
    {
        lICAO=ICAO;
        lNazwa=nazwa;
        lX=X;
        lY=Y;
        lDlPasa=dlPasa;
    } 
zamień na 
   Lotniska(String lICAO, String lNazwa, double lX, double lY, int lDlPasa)
    {
      this.ICAO= lICAO=ICAO;
      this.nazwa= lNazwa;
       this.X=IX;
       this.Y=IY;
       this.dlPasa=lDlPasa;
    }

Brak modyfikatora - oznacza, dostęp default- poczytaj.
Dodatkowo poczytaj, czym jest "this" dla czytelności warto wskazać czego tyczą się pola :) - że są to pola obiektu nie np. statyczne szablonu klasy 

1
komentarz 21 maja 2021 przez Fishu Nowicjusz (150 p.)
Dziękuję za rady, poczytam o tym

Pozdrawiam :)

Podobne pytania

0 głosów
1 odpowiedź 640 wizyt
+1 głos
1 odpowiedź 322 wizyt
pytanie zadane 4 lutego 2021 w C i C++ przez NukaNuka56 Obywatel (1,080 p.)
+1 głos
2 odpowiedzi 1,327 wizyt

92,555 zapytań

141,403 odpowiedzi

319,557 komentarzy

61,940 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!

...