Nabeel Munir Ответов: 1

Java.lang.arrayindexoutofboundsexception:3 ошибка в компиляции java


Здравствуйте, я пытаюсь отсортировать программу 2d-массива с помощью пузырьковой сортировки, но когда я компилирую программу, она запускается в определенную часть программы, она распечатывает 2d-массив, но, когда она доходит до сортировочной части, я получаю ошибку "java.lang.Arrayindexoutofboundsexception:3". Пожалуйста, скажите мне, как избавиться от этой ошибки. Смотрите код ниже.

Что я уже пробовал:

import java.util.Random;
import java.util.Scanner;

public class arrays {

	public static void main(String[] args) {
		
		Random ran= new Random();
	
		Scanner scan = new Scanner(System.in);
		
		int num,secnum,temp,i,j,k;
		
		System.out.println("Please enter a num.");
		
		
		
		num= scan.nextInt();
		
		System.out.println("Please enter another value.");
		
		secnum = scan.nextInt();
		
		int arrayi[][] = new int[num][secnum];
		
		
		for( i =0; i< num ; i++) {
			
			for( j =0; j< secnum; j++) {
				
				arrayi[i][j]= ran.nextInt(100);
				
			}
		}
		
		System.out.println("The array is below:");
		
for(i =0; i< num ; i++) {
			
			for( j =0; j< secnum; j++) {
				
				System.out.print(arrayi[i][j] + " ");
				
			}
			System.out.println();
		}
for( i =0; i< num ; i++) {
	
	for( j =0; j< secnum; j++) {
		
	for( k=0; k <secnum; k++) {
		if(arrayi[i][k] > arrayi[i][k+1] ) {
			temp = arrayi[i][k];
			arrayi[i][k] = arrayi[i][k+1];
			arrayi[i][k+1] = temp;
		}
	}
		
	}
	
}
System.out.println("Sorted array is below:");
for( i =0; i< num ; i++) {
	
	for( j =0; j< secnum; j++) {
		
		System.out.print(arrayi[i][j] + " ");
		
	}
	System.out.println();
}
		
scan.close();
	}
	

}

1 Ответов

Рейтинг:
8

Richard Deeming

for( k=0; k < secnum; k++) {
    if(arrayi[i][k] > arrayi[i][k+1] )


Длина array[i] является secnum Таким образом, максимальный индекс, к которому вы можете получить доступ, равен secnum - 1.

Когда ваш цикл достигнет последней итерации, k = secnum - 1, так что вы не можете получить доступ arrayi[i][k + 1], потому что это находится за пределами массива.

(Вы могли бы легко выяснить это сами, используя отладчик.)

Измените свой цикл на:
for ( k=0; k < secnum - 1; k++) {