kyrsjo Skrevet 16. september 2005 Del Skrevet 16. september 2005 Hei! Har et program som bruker et to-dimensjonalt array av klassen "oljefelt" som er deklarert slik: class Oljefelt { protected boolean solgt = false; protected String eier = ""; protected int utvunnet = 0; static int ledigefelt = 0; public boolean selg (String oljeselskap) { //Sjek System.out.println ("inne i selg"); ledigefelt--; return false; } public boolean annuler_salg (String oljeselskap) { return false; } public boolean oppdater_utvinning (int fat) { return false; } } Inne i "hovedklassen" min (Oblig2) deklarer jeg klassen slik: class Oblig2 { static In tast = new In (); static Out skjerm = new Out (); static final int rader = 17; static final int kolonner= 13; static Oljefelt[][] felt = new Oljefelt [rader] [kolonner]; public static void main (String [] args) { Oljefelt.ledigefelt = 17*13; ...OSV... Men når jeg skal bruke klassen (inne i main-metoden), krasjer programmet: skjerm.outln ("Hvilket felt ønsker du?"); skjerm.out ("Tast inn hvilken rad du ønsker (x-akse): "); int radnr = tast.inInt(); skjerm.out ("Tast inn hvilken kolonne du ønsker (y-akse): "); int kolnr = tast.inInt(); System.out.println (radnr + " " + kolnr); felt[1][1].selg("hei"); System.out.println ("forbi felt"); Som man ser, kommer man til linja "felt[1][1].selg("hei");". Der blir det krasj. Output: *** VELKOMMEN TIL RURITANIAS OLJEFELTOVERSIKT *** Du har følgende valgmuligheter: 1: Kjøp et felt 2: Annuler kjøp av et felt 3: Lag oversiktskart 4: Lag liste over oljeselskaper 5: Oppdater oljeutvinning 6: Finn maksimal og minimal oljeutvinning 7: Finn sum oljeutvinning 8: Avslutt 1 Hvilket felt ønsker du? Tast inn hvilken rad du ønsker (x-akse): 3 Tast inn hvilken kolonne du ønsker (y-akse): 2 3 2 Exception in thread "main" java.lang.NullPointerException at Oblig2.main(java.lang.String[]) (Unknown Source) at gnu.java.lang.MainThread.call_main() (/usr/lib/libgcj.so.6.0.0) at gnu.java.lang.MainThread.run() (/usr/lib/libgcj.so.6.0.0) Men hvorfor? NullPointerException betyr jo at jeg prøver å bruke en peker som peker på null - men har jeg ikke initialisert den men linja "static Oljefelt[][] felt = new Oljefelt [rader] [kolonner];" ? Skjønner ingenting... Lenke til kommentar
mar Skrevet 16. september 2005 Del Skrevet 16. september 2005 (endret) Du har opprettet selve listen, men felt[1][1] er NULL. Alle plassene i en objectliste er i utgangspunktet NULL referanser. feks: Object list[] = new Object[3]; Dette gir følgende innhold i list: 0 --> NULL 1 --> NULL 2 --> NULL Du kan så bruke "list[1] = new String("bare et eksempel"); Innholdet i list blir nå: 0 --> NULL 1 --> Object (String, "bare et eksempel") 2 --> NULL Du kan nå feks si "list[1].clone()", og det vil gå helt fint, mens "list[0].clone()" vil gi NullPointerException. Så det du må gjøre er å legge oljefelt inn i listen din. Endret 16. september 2005 av mar Lenke til kommentar
kyrsjo Skrevet 16. september 2005 Forfatter Del Skrevet 16. september 2005 Ok. Hvordan kan jeg da få initalisert alle oljefeltene inn i listen min? Har jo static Oljefelt[][] felt = new Oljefelt [rader] [kolonner]; så har jo opprettet både Oljefelt-pekere og lagt nye oljefelt inn i pekerne så vidt jeg kan se... Hvis jeg oppretter en (tom) konstruktør, vil den gjøre noen nytte for seg? Er temmelig ny på Java og objektorientert programmering så takker for all hjelp! Lenke til kommentar
threiran Skrevet 16. september 2005 Del Skrevet 16. september 2005 Ruritania begynt med olje... Verden går sannelig fremover. Putt noe alla: for(int i = 0; i<felt.length; i++) { for(int j = 0; j<felt[i].length; j++) { felt[i][j] = new Oljefelt(); } } Tidlig i static void main avdelinga. En tom constructor i Oljefelt gjør sikkert ikke noe (kan fylles etter hvert...) CPL Lenke til kommentar
kyrsjo Skrevet 16. september 2005 Forfatter Del Skrevet 16. september 2005 Ok, den koden der funka faktisk. Men finnes det noen "vakker" måte å gjøre det på, hvor jeg kan putte oppretting og initialisering inn i samme linja? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå