如果是2D数组中的语句

时间:2013-07-05 15:09:54

标签: java arrays if-statement indexoutofboundsexception

当我尝试运行此代码时,它显示java.lang.ArrayIndexOutOfBoundsException错误。请帮我修改一下这段代码。

import java.util.*;

class Example {
public static void main(String args[]) {

    Scanner input = new Scanner(System.in);
    Random r = new Random();
    final int N, S;

    System.out.print("Input No of Students : ");
    N = input.nextInt();
    System.out.print("No of Subject : ");
    S = input.nextInt();

    int[][] st = new int[N][S];
    int[] stNo = new int[N];
    int[] stMax = new int[N];

    for (int i = 0; i < N; i++) {
        stNo[i] = r.nextInt(10000);
        for (int j = 0; j < S; j++) {
            st[i][j] = r.nextInt(101);
        }
    }

    // Find max Value of marks of a Student
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < S; j++) {
            if (st[i][j] > st[i][j + 1]) {
                stMax[i] = st[i][j + 1];
            }
        }
    }

    // Display marks
    // Dispaly Column names
    System.out.print("stNo\t");
    for (int i = 1; i < S + 1; i++) {
        System.out.print("Sub " + i + "\t");
    }
    System.out.print("Max");

    // Print Values
    for (int i = 0; i < N; i++) {
        System.out.print(stNo[i] + "\t");
        for (int j = 0; j < S; j++) {
            System.out.print(st[i][j] + "\t");
        }
        System.out.print(stMax[i]);
        System.out.println();
    }
}
}

错误是

  Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: (here shows the input for "S")
at pack1.Example.main(Example.java:31)

由于我是编码新手,我无法解决这个问题。请帮我解决这个问题。 感谢

2 个答案:

答案 0 :(得分:3)

ArrayIndexOutOfBoundsException错误意味着您超出了数组的边界。在你的情况下,st有S colomns,你试图到达S+1 - 元素(索引S)。

st[i][j + 1] =&gt;当j == S-1(循环结束)时,你会超出范围。

现在,正如您的评论所说,您正在寻找最大值。那么代码应该是:

    stMax[i] = 0;
    for (int j = 0; j < S; j++) {
        if (st[i][j] > stMax[i]) {
            stMax[i] = st[i][j];
        }
    }

您的代码正在做的是将当前值与下一个值进行比较。每次下一个值大于当前值时,都会更新stMax [i]。这没有意义。

答案 1 :(得分:0)

此行导致异常:

 stMax[i] = st[i][j + 1]; 

您正在将j迭代到数组的末尾,并始终在寻找下一个元素。所以当j到达数组的末尾时,它仍然在寻找另一个索引,因此outOfBoundsException。