2016-04-08 21 views
1

Hallo Leute kann mir bitte jemand sagen, was das bedeutet? Ich bin für eine Partie Bowling, ein Programm zu schreiben und mein Programm kompiliert ohne Fehler, aber wenn ich es laufen, ist dieser Teil des Codes mit dem Fehler hervorgehoben: java.lang.ArrayIndexOutOfBoundsException:-1Array außerhalb der Grenzen Ausnahme Bowling Beispiel

Hier ist mein Code:

if(rolls[i]+rolls[i+1] == 10) { 
    total = rolls[i]+rolls[i+1]; 
    isSpare = true; 
} 

Edit: Hier ist die gesamte for-Schleife:

for (int i = 0; i < rolls.length; i += 2) { 
    isStrike = false; 
    isSpare = false; 
    lastFrame = false; 
    if (i == rolls.length - 3) { 
     System.out.println("FINAL FRAME"); 
     lastFrame = true; 
     total = rolls[i] + rolls[i + 1] + rolls[i + 2]; 
     frame[0] = rolls[i]; 
     frame[1] = rolls[i + 1]; 
     frame[2] = rolls[i + 2]; 
    } 
    if (rolls[i] == 10) { 
     total = rolls[i]; 
     frame[0] = rolls[i]; 
     isStrike = true; 
     i -= 1; 
    } else { 
     total = rolls[i] + rolls[i + 1]; 
     frame[0] = rolls[i]; 
     frame[1] = rolls[i + 1]; 
    } 
    if (rolls[i] + rolls[i + 1] == 10) { 
     total = rolls[i] + rolls[i + 1]; 
     isSpare = true; 
    } 
    runningTotal = runningTotal + total; 
    printFrame(frame, isStrike, isSpare, lastFrame, frames, runningTotal); 
    frames++; 
} //increment 

System.out.println(); 
} 
+0

Nicht genug Code. Zeig uns deine Schleife. – Borna

+0

Was ist die äußere Schleife dieser IF-Bedingung? – Danda

+0

Ich vermute, dass dies innerhalb einer for-Schleife ist und das ist, wo das "i" aus wie kommt für (int i = 0; i

Antwort

-2

Es schlägt fehl, wenn der Wert der rolls[i+1] davon aus, dass in diesem Moment zu bekommen versuchen, „i“ auf die maximale Anzahl von Elementen auf dem Array gleich ist.

+1

Dies ist keine gültige Antwort! Vorsicht vor Downvotes –

+0

Index '-1' ist sehr unwahrscheinlich in' roles [i + 1] '. –

+0

Ich habe gerade in meiner gesamten for-Schleife bearbeitet – CH26

0

Es scheint, dass "i" mit -1 initialisiert wurde, daher versuchen Sie, auf einen ungültigen Steckplatz im Array zuzugreifen.

+0

Ich denke, dass es mit -1 als Rollen initialisiert wurde [i] wird zuerst ausgewertet –

+0

danke für Ihren Kommentar, ich habe gerade in der gesamten for-Schleife enthalten – CH26

1
if(rolls[i]==10){ 
    total=rolls[i]; 
    frame[0]=rolls[i]; 
    isStrike=true; 
    i-=1; 
} 

In Ihrer ersten Iteration, wenn Rollen [0] zufällig 10 ist, reduzieren Sie i um 1, was -1 ergibt. Die nächste if-Anweisung wird dann eine Ausnahme auslösen.

0

Es scheint ein paar Bugs in diesem Code zu sein. Lassen Sie mich zunächst etwas wiederholen, was @Thomas sagte, indem man zu ihm,

if (rolls[i] == 10) { 
    total = rolls[i]; 
    frame[0] = rolls[i]; 
    isStrike = true; 
    i -= 1; 
} 

Sprich rolls[0] = 10; i wird auf -1 gesetzt. Im folgenden Block,

if (rolls[i] + rolls[i + 1] == 10) { 
    total = rolls[i] + rolls[i + 1]; 
    isSpare = true; 
} 

Sie versuchen rolls[-1] und rolls[0] zuzugreifen. Daher das Problem.

Zweitens, ich weiß nicht, ob das ein Fehler in Ihrer Logik ist, aber ich dachte, ich sollte darauf hinweisen. i -= 1; wird die i um 1 reduzieren. Bei der nächsten Iteration der Schleife tritt i++vor Eingabe der Schleife Körper. Also, Sie sind im Wesentlichen stecken auf den gleichen Index, und ich verstehe nicht, warum Sie das wollen.

Drittens versucht der Zugriff auf i+1 in einer Schleife, die Sie bis zum letzten Element des Arrays dauert, zu einem ArrayIndexOutOfBoundsException auf dem letzten Index führen.

+0

Vielen Dank für Ihren Kommentar, ich bin immer noch unsicher, wie ich Ich sollte die ArrayIndexOutOfBoundsException korrigieren – CH26

+0

@ CH26 Könnten Sie mir eine Idee über Ihren gesamten Plan geben? Ich wäre besser in der Lage, eine Lösung vorzuschlagen, sobald ich eine bessere Vorstellung davon habe, was das Ziel ist. –

Verwandte Themen