2016-04-17 9 views
0

Ich habe den folgenden Code:Eine saubere Art und Weise von ‚if-Anweisung Struktur‘ java.lang.ArrayIndexOutOfBoundsException zu vermeiden: -1

dist[i - 1][j] = i - 1 >= 0 ? findDist(matrix, i - 1, j, rowNum, colNum, dist) : 0; 

Und ich habe die java.lang.ArrayIndexOutOfBoundsException: -1

Also muss ich das ändern Code zu:

if (i - 1 >= 0) { 
     dist[i - 1][j] = findDist(matrix, i - 1, j, rowNum, colNum, dist); 
} 

Allerdings wird es weniger sauber. Ich frage mich, gibt es eine bessere Möglichkeit, den obigen Code zu strukturieren? Vielen Dank!

+4

Das ist wohl viel sauberer. Weniger Linien! = Mehr sauber. Ternarys sollte vorsichtig verwendet werden. – Carcigenicate

+2

'wenn (i> 0)' wäre prägnanter, wenn das deine Sache ist. –

+1

@ T.J.Crowder Oder noch besser 'int index = i - 1; 'und benutze das dann. Dies vermeidet auch die Verwendung von "i - 1" dreimal. – Tom

Antwort

0

Sie können die Verzweigung in diesem speziellen Fall nicht vermeiden, da Sie eine Zuweisung durchführen und die IOOBE von der linken Seite der Zuweisung kommt (z. B. das Ziel). Es gibt nichts, was Sie auf der Handseite der Zuweisung tun könnten würde die Bewertung der linken Seite und schließlich den Zugriff auf einen Out-of-Bounds-Index zu verhindern. Sie müssen ihm entweder zuweisen oder überspringen, indem Sie ihm zuweisen. Das ist verzweigt.

Es gibt Sprachen, in denen diese Verzweigung anders gemacht werden könnte, aber in Java ist Ihre if, wie Sie das tun würden.

Sie könnten die Verzweigung in einer Dienstprogrammfunktion ausblenden, die ein Lambda akzeptiert, aber das wäre wahrscheinlich für das angegebene Beispiel übertrieben.

0

Sie erhalten die ArrayIndexOutOfBoundException in dist [i-1]. Da der i-1 gleich -1 sein kann. Es ist also besser, wenn Sie überprüfen können, ob der Wert größer als oder gleich 0 ist, bevor Sie auf die Elemente des Dist-Arrays zugreifen.

Verwandte Themen