Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse

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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...