当我尝试运行此代码时,它显示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)
由于我是编码新手,我无法解决这个问题。请帮我解决这个问题。 感谢
答案 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。