Tullballj Skrevet 6. mars 2007 Del Skrevet 6. mars 2007 Jeg holder på med en oppgave i java. Jeg skal skrive ut kjønn på et dyr, jeg får NullPointerExeption som feilmelding. Her er koden som blir merket med feil public void printSex() { if((sex[0] != null) || (sex[1] != null)){ System.out.println("Kjønn:"); for(int i = 0; i < sex.length; i++) {System.out.println(sex[i]);} System.out.println(); } else{System.out.println("Kjønn er ukjent:");} denne linjen blir altså merket med feil... if((sex[0] != null) || (sex[1] != null)){ Hva kan være galt? Lenke til kommentar
P@rm@nn Skrevet 6. mars 2007 Del Skrevet 6. mars 2007 Kan det hende at variabelen sex ikke peker til en tabell, men til null? Bare for diagnostiseringens skyld kan du jo legge til f.eks if(sex==null){ System.out.println("sex er en nullpeker"); } Ellers forstår jeg egentlig ikke hva du vil med den if'en. Vil du sjekke at variabelen faktisk peker til en tabell? For da bruker f.eks du if'en jeg har skrevet over(negert seff). Lenke til kommentar
Ueland Skrevet 6. mars 2007 Del Skrevet 6. mars 2007 Du kan og fjerne det ene paranteslaget da det sjkkes rett uansett: "if( sex[0] != null || sex[1] != null)" Er "sex" en variabel i klassen, og er en initialisert? Lenke til kommentar
Tullballj Skrevet 6. mars 2007 Forfatter Del Skrevet 6. mars 2007 (endret) jeg har to klasser. I den ene klassen kan jeg skrive ut informasjonen, i den andre klassen kan jeg skrive inn gutt, eller jente. Den første delen er en del av hovedklassen (dyr). I klassen sau legger jeg til kjønn. public class Sau { private String sex; public Dyr(int age, String name) { sex = null; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } Noe slikt... I den andre klassen så er det noe slikt. public class Hoved { private ArrayList<Sau> sauer; private String[] sex; } public Hoved() { sauer = new ArrayList<Sau>(); } public void addSau(Sau sau){ sauer.add(sau); } public void removeSau(Sau sau){ sauer.remove(sau); } } public void printSex() { if((sex[0] != null) || (sex[1] != null)){ System.out.println("Kjønn:"); for(int i = 0; i < sex.length; i++) {System.out.println(sex[i]);} System.out.println(); } else{System.out.println("Kjønn er ukjent:");} Noe slikt er kodene... Endret 6. mars 2007 av NestenUtenkunnskap Lenke til kommentar
Tullballj Skrevet 6. mars 2007 Forfatter Del Skrevet 6. mars 2007 jwg prøvde med den, da skrev den bare ut "sex er en nullpeker" Lenke til kommentar
Ueland Skrevet 6. mars 2007 Del Skrevet 6. mars 2007 1) I "Sau" klassen din så har du jo ingen konstruktør, konstruktøren skal hete public klassenavn", du har kalt den dyr. 2) Såvidt jeg kan se setter du aldri kjønnet til en sau noen gang. Håper det hjelper deg på vei Lenke til kommentar
dostojevski Skrevet 6. mars 2007 Del Skrevet 6. mars 2007 Ueland kom meg i forkjøpet... Altså: Hvor instansierer du String[] sex? Et annet poeng... Denne er skummel: if((sex[0] != null) || (sex[1] != null)){ Denne forhindrer IKKE at du kan få null-referanse i for-løkka de. Hvis du feks. har følgende Array: sex[0]->String sex[1]->Null sex[2]->String eller sex[0]->Null sex[1]->String I begge tilfeller vil det ikke være noen String å skrive ut. Følgelig skrives det ut: "Kjønn:" (eller var det "Kjønn: null"....? Husker ikke nøyaktig.) Det er bedre å skjekke om sex.length>0 før for-løkka, og så sjekke om hvert enkelt element er null mens du ittererer. Lenke til kommentar
Tullballj Skrevet 12. mars 2007 Forfatter Del Skrevet 12. mars 2007 Okay, jeg bare tenker helt nytt nå... Jeg skal lage et program som ser slik ut. public class Database { private ArrayList items; public void list() { for(Iterator iter = items.iterator(); iter.hasNext(); ) { Item item = (Item)iter.next(); item.print(); } } } public abstract class Items { private String title; private int playingTime; private boolean gotIt; private String comment; public void print() { System.out.print("title: " + title + " (" + playingTime + " mins)"); if(gotIt) { System.out.println("*"); } else { System.out.println(); } System.out.println(" " + comment); } } public class CD extends Item { private String artist; private int numberOfTracks; public void print() { super.print(); System.out.println("CD " + artist); System.out.println(" tracks: " + numberOfTracks); } } public class Video extends Item { private String director; public void print() { super.print(); System.out.println("Video " + director); } } Nå når jeg trykker compile i klassen Database får jeg "cannot find symbol - class array list" Når jeg trykker compile i klassen CD eller Video, får jeg "cannot find symbol" Lenke til kommentar
Tullballj Skrevet 12. mars 2007 Forfatter Del Skrevet 12. mars 2007 (endret) Ops, jeg hadde glemt en S i item. public class Video extends Items Nå fungerer de, men hva er det jeg har oversett i Database klassen? Endret 12. mars 2007 av NestenUtenkunnskap Lenke til kommentar
Epixx Skrevet 12. mars 2007 Del Skrevet 12. mars 2007 import java.util.ArrayList; Lenke til kommentar
Tullballj Skrevet 12. mars 2007 Forfatter Del Skrevet 12. mars 2007 Takker, nå fungerer det. Nå er det bare masse andre småting som må fikses etter jeg nå har utvidet litt. 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å