2017-11-17 2 views
0

Ich habe eine harte Zeit mit einem Array in einer for-Schleife, die Würfelzahlen 1-9 in absteigender Reihenfolge soll. Ich bekomme immer einen Fehler außerhalb der Grenzen und die gewürfelten Werte sind komplett aus. Ich wäre sehr dankbar für eine Erklärung, wo ich falsch liege, wenn ich über Arrays nachdenke. Ich glaube, das Problem ist mit meinem Index, aber ich habe Mühe zu erklären, warum.For Schleife in Array (Java) Index Out of Bounds

System.out.println("***** Step 1: Using a for loop, an array, and the Math Class to get the cubes from 9-1 *****"); 
    System.out.println(); 
    // Create array 
    int[] values = new int[11]; 
    int[] moreValues = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 
    // Create variable to store cubed numbers 
    double cubedNumber = 0; 
    // Create for loop to count in descending order 
    for (int counter = 9; counter < moreValues.length; counter--) 
    { 
     cubedNumber = Math.pow(counter,3); 
     System.out.println(moreValues[counter] + " cubed is " + cubedNumber); 
    } 

Output

+3

Sobald 'counter' erreicht -1, wird es versuchen, und einen Wert des Feldes an einem Index gelesen, die so nicht existiert, Out Of Bounds. Könnte besser mit 'for (int counter = (moreValues.length) -1; counter> = 0; counter -)' gedient werden (obwohl warum Sie in Ihrem Fall lieber runterzählen würden als in mir). – AntonH

+2

Sie wissen, dass Sie in Ihrer 'Math' Zeile den Zähler, nicht' moreValues ​​[counter] 'cubing? –

+0

Auch lohnt sich, obwohl nicht ganz ein Duplikat: https://stackoverflow.com/questions/5554734/what-causes-a-java-lang-arrayindexoutofboundexception-and-how-do-i-prevent-it – AntonH

Antwort

1

Ihr Haupt Bug ist die Schleifenabbruchbedingung counter < moreValues.length, die, wenn Sie unten wird immer richtig sein sind zu zählen.

Stattdessen prüfen der Index auf oder über Null ist:

for (int counter = 9; counter >= 0; counter--) 

Ihre andere Fehler ist Sie cubing den Index, nicht die Zahl, auf die durch den Index, so Code dieser Stelle;

cubedNumber = Math.pow(moreValues[counter], 3); 

Um Verwirrung zu verringern, sind Sie besser einen Industriestandard Namen für die Schleifenvariable, wie i oder wo die Schleifenvariable auf ein Array als ein Index verwendet wird verwendet, verwendet wird index oft und Code verbessern können Klarheit.

+0

Vielen Dank für diese Erklärung! Könntest du auch erklären, warum mein Index 11 ist, aber wenn ich die Werte in moreValues ​​deklariere, habe ich nur 10 Ziffern? Mein Lehrbuch hat das nicht wirklich gut erklärt und ich arbeite hauptsächlich von dort. – iMagicMango

0

Versuchen:

for (int counter = moreValues.length; counter >= 1; counter--) 
{ 
    cubedNumber = Math.pow(counter,3); 
    System.out.println(moreValues[counter-1] + " cubed is " + cubedNumber); 
}