Poslao: 15 Avg 2013 22:47
|
offline
- Sass Drake
- Anti Malware Fighter
Rank 2
- Pridružio: 26 Avg 2010
- Poruke: 10622
- Gde živiš: Hypnos Control Room, Tokyo Metropolitan Government Building
|
Napisano: 15 Avg 2013 22:41
Već nekoliko sati lupam glavu i ne mogu da provalim gdje griješim. Stalno mi na liniji 19 (if (Autotrka.staza[id][pos] == Autotrka.stop) ) izbacuje Null pointer exception iako su te pozcije u nizu već popunjene Object-ima i Stopovima. Ako neko zna gdje griješim bio bih mu zahvalan kada bi mi pokazao gdje griješim.
import java.util.* ;
class Autotrka {
public static Object staza [][] ;
public static boolean win = false ;
public static String stop = "STOP!" ;
public static Automobil a [] ;
public static void main (String args []) {
Object staza[][] = new Object[3][15] ;
for (int i = 0 ; i < 3 ; i++)
for (int j = 0 ; j < 15 ; j++)
staza[i][j] = new Object() ;
Automobil a[] = new Automobil[3] ;
for (int i = 0 ; i < 3 ; i++)
a[i] = new Automobil() ;
staza[0][0] = a[0] ;
staza[1][0] = a[1] ;
staza[2][0] = a[2] ;
int x = 0 ;
int y = 0 ;
Random rand = new Random() ;
for (int i=0 ; i < 4 ; i++) {
x = rand.nextInt(2) ; // zbog prirode metode nextInt(n)
y = rand.nextInt(14) ;
if (staza[x][y] != stop) staza[x][y] = stop ;
else i-- ; //vraća brojač u slučaju da je staza[x][y] == stop
}
a[0].start() ;
a[1].start() ;
a[2].start() ;
}
}
class Automobil extends Thread {
private String tip ;
private int id ;
static private int br = 0 ;
private int pos ;
Automobil () {
tip = "NekiTip" ;
id = br ;
br++ ;
pos = 0 ;
}
public void run() {
try {
for ( ; pos < 15 && !Autotrka.win ; pos++) {
System.out.println(pos + " " + id) ; //samo za provjeru
if (Autotrka.staza[id][pos] == Autotrka.stop) {
System.out.println("Auto br " + id + " naišlo je na STOP na poziciji " + pos) ;
sleep(5000) ;
}
else sleep(1000) ;
Autotrka.staza[id][pos+1] = Autotrka.a[id] ;
Autotrka.staza[id][pos] = new Object() ;
}
if (pos == 15 && !Autotrka.win) {
Autotrka.win = true ;
System.out.println("Pobijedio je auto br " + id) ;
interrupt() ;
}
if (pos < 15 && Autotrka.win) {
System.out.println("Autu br " + id + " je ostalo " + (15-pos) + " do kraja.") ;
interrupt() ;
}
}
catch (Exception e) {e.printStackTrace();}
}
}
Dopuna: 15 Avg 2013 22:47
Napomena.
Ista situacija je i sa equals metodom.
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 16 Avg 2013 06:43
|
offline
- N1k0l4
- Prijatelj foruma
- Pridružio: 06 Sep 2005
- Poruke: 3800
- Gde živiš: Beograd
|
A kad prodjes debug-om i stanes u tom redu na promenjive
Autotrka.staza[id][pos] i Autotrka.stop, vidi im vrednosti za staza[id][pos] i za stop?
|
|
|
|
|
Poslao: 16 Avg 2013 12:36
|
offline
- Srki_82
- Moderator foruma
- Srđan Tot
- Am I evil? I am man, yes I am.
- Pridružio: 12 Jul 2005
- Poruke: 2483
- Gde živiš: Ljubljana
|
Umesto reda u kojem imaš:
Object staza[][] = new Object[3][15] ;
napiši samo:
staza = new Object[3][15] ;
Na taj način ćeš inicijalizirati statičku promenljivu staza, umesto da napraviš lokalnu sa istim imenom, dok statička ostaje neinicijalizovana.
|
|
|
|
Poslao: 16 Avg 2013 12:38
|
offline
- ivance95
- AMF pripravnik
- Pridružio: 04 Jul 2011
- Poruke: 5424
|
Moraš da inicijalizuješ statičku varijablu, a ne da praviš lokalnu.
Object staza[][] = new Object[3][15] ;
Probaj sa:
Citat:staza = new Object[3][15] ;
|
|
|
|
Poslao: 16 Avg 2013 12:51
|
offline
- Fil
- Legendarni građanin
- Pridružio: 11 Jun 2009
- Poruke: 16586
|
Yup, i ja mislim da će ovo da ti reši problem, budući da si već deklarisao "stazu".
|
|
|
|
|
Poslao: 16 Avg 2013 17:58
|
offline
- Pridružio: 16 Feb 2011
- Poruke: 1630
- Gde živiš: Pancevo
|
Sta ce tebi pokazivaci u Javi? Mani se toga ako bas volis da radis sa pointerima onda idi na C++...
|
|
|
|
Poslao: 16 Avg 2013 18:14
|
offline
- Sass Drake
- Anti Malware Fighter
Rank 2
- Pridružio: 26 Avg 2010
- Poruke: 10622
- Gde živiš: Hypnos Control Room, Tokyo Metropolitan Government Building
|
Napisano: 16 Avg 2013 18:06
_iKaC ::Sta ce tebi pokazivaci u Javi? Mani se toga ako bas volis da radis sa pointerima onda idi na C++...
Ne vidim pokazivače niti ih želim koristiti u Javi. Na koji dio koda konkretno misliš?
Dopuna: 16 Avg 2013 18:14
U javi su koliko m ije pozanto svi objekti dinamički i varijable, u ovom slučaju staza[][] i a[], su pointeri na neku memorijsku lokaciju u heap-u pa baš i ne razumijem tvoje pitanje zašto koristim pokazivače.
|
|
|
|
Poslao: 16 Avg 2013 18:24
|
offline
- Pridružio: 16 Feb 2011
- Poruke: 1630
- Gde živiš: Pancevo
|
Pointer = Pokazivac
Pre par godina sam citao neku knjigu bas namenjena za Java PRL. Detaljno je bilo opisano za pintere i lociranje u memoriji. Java izbegava korisncenje pokazivaca na datu lokaciju u memoriji a kamo li citanje. Ti si u pravu i ovaj tvoj multi array naravno da sadrzi neku lokacaju u momoriji. Ali kazem nisam video da iko naziva handler pointerom. Al eto nesto novo da cujem.
|
|
|
|