ArrayIndexOutOfBoundsException帮助我解决这个问题



实际上我正在解决一个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((方法来检查扫描仪中是否有内容,因此它检查扫描仪以及使用扫描仪中的第一个元素。试试这个,如果你需要更多的解释,请告诉我。

相关内容

  • 没有找到相关文章

最新更新