Lỗi ArrayIndexOutOfBoundsException khi làm bài ma trận xoắn ốc

Mọi người coi hộ giúp e, bài này e làm ma trận xoắn ốc, nó chỉ đúng ở các trường hợp số lẻ như 3x3, 5x5, 7x7, 9x9 … còn các trường hợp khác nó đều báo lỗi ArrayIndexOutOfBoundsException
Nó báo ở dòng for thứ 2 trong while. Em cảm ơn ạ!

"C:\Program Files\Java\jdk-10.0.2\bin\java.exe" "-javaagent:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.2.4\lib\idea_rt.jar=65140:C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.2.4\bin" -Dfile.encoding=UTF-8 -classpath E:\second\out\production\second java_array.bt4
Column: 6
Rows: 6
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -2147483648
	at java_array.bt4.main(bt4.java:25)

Process finished with exit code 1
package java_array;

import java.util.Scanner;

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

        Scanner scanner = new Scanner(System.in);
        System.out.print("Column: ");
        int column = scanner.nextInt();
        System.out.print("Rows: ");
        int row = scanner.nextInt();
        int[][] arr = new int[row][column];
        int value = row * column - 1;
        int count = 0, temp, i, j;
        while (value != 0) {

            for (i = count; i < column - count; i++) {
                arr[count][i] = value;
                value--;
            }
            temp = i - 1;

            for (j = count + 1; j < row - count; j++) {
                arr[j][temp] = value;
                value--;
            }
            temp = j - 1;

            for (i = column - count - 2; i >= count; i--) {
                arr[temp][i] = value;
                value--;

            }
            temp = i + 1;

            for (j = row - count - 2; j > count; j--) {
                arr[j][temp] = value;
                value--;
            }

            count++;
        }

        for (int[] x : arr) {
            for (int y : x) {
                System.out.printf("%5d", y);
            }
            System.out.println();
        }

    }
}

Có j sai sót mong bác bỏ qua cho e

Bạn mô tả đề bài để mọi người hình dung vấn đề của bạn rõ hơn. Copy toàn bộ exception message lên đây nữa để mọi người có thể dễ dàng tìm ra phương hướng cho bạn

1 Like


Đề bài yêu cầu tạo một ma trận xoắn ông có dạng như này ạ

Giá trị -2147483648 chính là giá trị nhỏ nhất (Integer.MIN = Integer.MAX +1) của kiểu số nguyên (có dấu) trong java.

Trong lúc tính toán, có thể sai sót làm 1 giá trị chỉ số của mảng nhận giá trị này.
Các phần tử trong mảng không có giá trị âm.

Có thể là do temp gây ra.

2 Likes

em cũng walk through mấy lần r, những vẫn k thấy lỗi ở đâu ạ

Thà nó sai hết tất cả trường hợp thì đành, cái này nó đúng mấy trường hợp 3x3 5x5 … mới đau đầu ạ

merged and moved by noname00

1 Like

Có thể bị lặp vô hạn do điều kiện dừng của bạn là value != 0, bạn đổi thành while (value>=0) xem

4 Likes

ôi ôi đúng r bác ạ, sai cái điên thật chứ, Em cảm ơn bác Quân ạ :heart_eyes::heart_eyes::heart_eyes:

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?