实际上我正在解决一个SPOJ问题。在这篇文章中,我比较了两个相邻的数组元素,并将较大的元素存储在前一行索引中。这是我的代码-
import java.util.Scanner;
/**
* Created by Sainath on 15-08-2016.
*/
public class SIT {
public static void main(String[] args) {
int a;
int b[][];
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
while (n != 0) {
a = sc.nextInt();
b = new int[a][a];
for (int i = 0; i<a; i++) {
for (int j = 0; j<=i; j++) {
b[i][j] = sc.nextInt();
}
}
for (int i=a; i>1; i--) {
for (int j=1; j<a; j++) {
if (b[i][j] >= b[i][j+1])
b[i-1][j] = b[i-1][j] + b[i][j];
else
b[i-1][j] = b[i-1][j] + b[i][j+1];
}
}
System.out.println(b[0][0]);
n--;
}
}
}
我在第22行得到"ArrayIndexOutOfBoundsException"异常。
尝试运行第二个for
循环,直到a-2
而不是a-1
。
for (int i=a; i>1; i--) {
for (int j=1; j<a-1; j++) { try a-1 instead of a
if (b[i][j] >= b[i][j+1])
b[i-1][j] = b[i-1][j] + b[i][j];
else
b[i-1][j] = b[i-1][j] + b[i][j+1];
}
}
因为您使用的是j+1
。
从更改代码
int n = sc.nextInt();
while (n != 0) {
至
while (sc.hasNext()) {
原因是,要检查scanner中是否有内容,必须使用hasNext((方法,而要使用scanner中的int,则可以使用nextInt((方法。由于您使用nextInt((方法来检查扫描仪中是否有内容,因此它检查扫描仪以及使用扫描仪中的第一个元素。试试这个,如果你需要更多的解释,请告诉我。