Shaitan02 Skrevet 31. mars 2004 Del Skrevet 31. mars 2004 Heisann. Har et problem med koden min i java. kompilering går helt fint, men når jeg kjører programmet, velger alt. 1 i hovedmeny, og registrerer rad og sete kommer følgende feilmelding: java.lang.ArrayIndexOutOfBoundsException: 50 at testO3.main(testO3.java:67) Dette er et utdrag av koden: import easyIO.*; class Passasjer { String navn; String billNr; String hjemsted; int telefonnr; } class testO3 { public static void main(String [] args) { In tast = new In(); Out skjerm = new Out(); Passasjer [] [] seter = new Passasjer [11] [6]; int valg; int rad, sete = 0; skjerm.outln(""); skjerm.outln("***INNSJEKKING***"); skjerm.outln(""); skjerm.outln("**Du har nå følgende valg**"); skjerm.outln(""); skjerm.outln("1) Legg inn setereservasjon."); skjerm.outln("2) Vis setereservasjon."); skjerm.outln("3) Fjern setereservasjon."); skjerm.outln("4) Skriv seteoversikt."); skjerm.outln("5) Skriv passasjerliste."); skjerm.outln("6) Avslutt."); skjerm.outln(""); skjerm.out("Velg Kommando: "); valg = tast.inInt(); tast.skipWhite(); if (valg == 1) { boolean funnet; skjerm.outln(""); skjerm.outln("**Du valgte å legge inn en setereservasjon.**"); skjerm.outln(""); skjerm.out("Oppgi ønsket rad: "); rad = tast.inChar(); tast.skipWhite(); skjerm.outln(""); skjerm.out("Oppgi ønsket Sete: "); sete = tast.inChar(); tast.skipWhite(); if (sete == 'a') { sete = 0; }else if (sete == 'b') { sete = 1; }else if (sete == 'c') { sete = 2; }else if (sete == 'd') { sete = 3; }else if (sete == 'e') { sete = 4; }else if (sete == 'f') { sete = 5; } if (seter[rad][sete] != null) { funnet = true; skjerm.outln(""); skjerm.outln("Dessverre, setet er opptatt."); skjerm.outln("Vennligst forsøk igjen"); }else{ seter[rad][sete] = new Passasjer(); skjerm.outln(""); skjerm.out("**PASSASJER REGISTRERT!**"); rad ++; sete ++; }// end sete-test. } } } Håper noen ser hva jeg har gjort feil. På forhånd takk! Lenke til kommentar
threiran Skrevet 31. mars 2004 Del Skrevet 31. mars 2004 java.lang.ArrayIndexOutOfBoundsException: 50 <klippe> rad = tast.inChar(); <klippe> if (seter[rad][sete] != null) { <klippe> Du har prøvd å aksessere rad-indeks 50. Siden seter[][] ikke er så stor, får du ArrayIndexOutOfBoundsException. Men dette hadde du kanskje gjettet. Hvorfor? Uten å kjenne EasyIO pakken du bruker, ser det ut som om du leser inn en char. For sete indexen har du gjort rett: gjort om fra tegn verdien til en tallverdi som kan benyttes som indeksvariabel. Dette har du ikke gjort for radindeksen. F.eks: tegnet '0' har tallverdien 48, og tegnet '2' tallverdien 50. To enkle løsninger er enten å bruke en tilsvarende switch struktur som for seter for å tolke om tegn til tall, eller trekke 48 fra rad-indeksen etter at denne er lest inn. En mer avansert løsning er å lese inn en streng og så benytte Integer.parseInt(String s) for å gjøre det om strengen til en verdi du kan benytte. Lykke til CPL 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å