Wie überwinde ich java.lang.ArrayIndexOutOfBoundsException: 2 in diesem code?
Wenn ich getestet habe, dieser code, es gab mir java.lang.ArrayIndexOutOfBoundsException: 2
Der code ist noch nicht fertig aber das ist, was ich versuche zu tun:
Ein Programm, das den Anwender auffordert, zwei zahlen. Drucken Sie alle zahlen von der kleineren
Anzahl der größeren Zahl (inclusive) in zufälliger Reihenfolge. Mit dieser bestellen, finden Sie die
größte Summe von 2 zahlen nebeneinander.
Könnte mal bitte zeigen Sie mir, was repariert werden muss und wie man es beheben? Danke.
boolean isNum = false;
int in1 = 0;
int in2 = 0;
int size = 0;
int largestsum = 0;
while (!isNum) {
try {
System.out.print("Enter a number: ");
in1 = Integer.parseInt(in.readLine());
boolean isSame = false;
while (!isSame) {
System.out.print("Enter a number: ");
try {
in2 = Integer.parseInt(in.readLine());
if (in1 != in2) {
isSame = true;
} else {
System.out.println("Same number.");
}
} catch (NumberFormatException nfe) {
System.out.println("Not a number.");
}
}
isNum = true;
} catch (NumberFormatException nfe) { //catches error
System.out.println("Not a number."); //informs user of the error
}
}
if (in1 > in2) {
size = in1 - in2 + 1;
int[] num = new int[size];
for (int i = 0; i < size; i++) {
num[i] = in2 + i;
}
int[] order = new int[size];
boolean[] used = new boolean[size];
for (int i = 0; i < size; i++) {
int r = (int) ((size) * (Math.random()));
while (used[r]) {
r = (int) ((size) * Math.random());
}
order[i] = r; //fill array
used[r] = true; //r is now used
}
for (int i = 0; i < size; i++) {
if (num[order[i]] + num[order[i + 1]] > largestsum) {
largestsum = num[order[i]] + num[order[i + 1]];
}
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den letzten für - Schleife überlauf, wenn i=size-1
In Ihrer Frage, die Sie wollen, um die Summe zwischen 2 benachbarten zahlen. Ihre Logik in den letzten für Schleife sagt, dass Sie die Berechnung der Summe durch hinzufügen der Anzahl ich zu i+1. Das Letzte Element im array an position Größe-1, so, wenn Sie dann versuchen, dies zu der nächsten benachbarten Reihe, (size-1)+1 über das array.
Um das problem zu beheben, Ihre Letzte for-Schleife sollte nur fortfahren, bis i<Größe-1, wie so...
Mit dieser festen Logik, das größte Element in der für Schleife ist Größe-2, und wenn Sie 1 hinzufügen, um es (für die nächsten benachbarten Reihe), es wird Element wählen (Größe-2)+1, und das ist das Letzte Element im array, sondern als überfüllt array.
Meine Vermutung ist, das problem ist in Ihrem letzten for-Schleife. Da
order
können Werte enthalten, angefangen von0
zusize
,num[order[i]]
ist immer gültig, aber in dem Fall, woorder[i]==size
,num[order[i+1]]
ist out of bounds.