Ich arbeite an Java über die Codefights-Website. Dies ist die Übung:Java-Arrays Fehler (nicht außerhalb der Grenzen)
Nachdem CodeBots Berühmtheit erlangt hatten, beschlossen sie, in ein neues Gebäude umzuziehen und zusammenzuleben. Das Gebäude wird durch eine rechteckige Matrix von Räumen dargestellt, wobei jede Zelle eine Ganzzahl enthält - der Preis des Raumes. Einige Zimmer sind frei (ihre Kosten sind 0), aber das ist wahrscheinlich, weil sie haunted sind, so dass alle Bots Angst vor ihnen haben. Deshalb ist jeder Raum, der frei ist oder sich irgendwo unter einem freien Raum in derselben Spalte befindet, nicht als für die Bots geeignet angesehen. Helfen Sie den Bots, den Gesamtpreis aller Zimmer zu berechnen, die für sie geeignet sind. Beispiel: Für
matrix = [[0, 1, 1, 2], [0, 5, 0, 0], [2, 0, 3, 3]]
sollte die Ausgabe
matrixElementsSum(matrix) = 9
sein. Hier ist die Zimmer-Matrix mit ungeeigneten Räumen die mit 'x':[[x, 1, 1, 2], [x, 5, x, x], [x, x, x, x]]
So lautet die Antwort 1 + 5 + 1 + 2 = 9.
Ich verstehe, dass ich muss gehen durch alle Elemente des Arrays, das ist einfach. Der Teil, an dem ich aufgehängt bin, überprüft die "0" -Räume über dem aktuellen Element im Array. Ich weiß, dass diese Position matrix [i-1] [j] ist, wobei die aktuelle Position in der Matrix die Matrix [i] [j] ist. Aber ich bekomme einen Fehler "InvocationTargetExeption", wenn ich versuche, dies zu implementieren.
Meine Annahme ist, dass ich nach negativen Zahlen in der Array-Adresse frage, aber ich bin mir nicht sicher, wie das zu beheben ist. Hier ist mein Code:
int matrixElementsSum(int[][] matrix) {
int sum = 0;
for(int i = 0; i < matrix.length; i++){
for(int j = 0; j < matrix[i].length; j++){
if(matrix[i-1][j]==0){ sum += 0;}
else{sum += matrix[i][j];}
}
}
return sum;
}
Es ist immer noch ein AIOOBE sein könnte. Sie müssen den Rest des StackTrace überprüfen (und hier veröffentlichen). –
Sie haben ich bei 0 beginnen, und Sie verwenden i-1 in Ihrer if-Anweisung, also wenn i = 0, rufen Sie Matrix [-1] – Tyler
Mit i == 0 versuchen Sie, Zugriff auf Matrix [-1] ' in der if-Anweisung, die zu der Ausnahme führt. Wie rufen Sie diesen Code auf? Es scheint, als gäbe es einen Rahmen dafür. Die Ausnahme sollte mit "Caused by" fortgesetzt werden und früher als später sollte es eine ArrayIndexOutOfBoundsException oder etwas ähnliches geben – Lothar