Если утверждения в 2D массивах

Вопрос:

Когда я пытаюсь запустить этот код, он показывает ошибку 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)

Поскольку я новичок в кодировании, я не могу это исправить. Пожалуйста, помогите мне исправить это. благодаря

Лучший ответ:

Ошибка ArrayIndexOutOfBoundsException означает, что вы превысите границы массива. В вашем случае st имеет S colomns, и вы пытались достичь элемента S+1 -th (индекс S).

st[i][j + 1] => когда 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

Эта строка вызывает исключение:

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

Вы выполняете итерацию j до конца массива и всегда ищете следующий элемент. Поэтому, когда j достигает конца массива, он все еще ищет еще один индекс, следовательно, outOfBoundsException.

Оцените статью
TechArks.Ru
Добавить комментарий