Java代码中的数组索引超出范围异常

时间:2018-07-24 12:56:33

标签: java multidimensional-array indexoutofboundsexception

我正在编写代码,以获取用户以n值形式输入的矩阵: 假如 n = 3 输出: 3 3 3 3 0 3 3 1 3 3 2 3 3 3 3

我在以下行中得到ArrayIndexOutOfBoundException:a[i][j]=n;

import java.util.*;
public class HelloWorld{

     public static void main(String []args){

         Scanner scan = new Scanner(System.in);
         //System.out.println("Enter n");
         int n = scan.nextInt();
         System.out.println(n);
         int a[][]= new int[n][n];
         int b=0;
         int mid = n/2 +1;
         for(int i=0;i<n;i++)
         {
             for(int j=0;j<n;j++)
             {
                 if(i+j==mid)
                 {
                     a[i][j]=n-b;
                     b++;
                 }
                 else
                 {
                    a[i][j]=n;
                 }


             }
         }
         for(int i=0;i<n;i++)
         {
             for(int j=0;j<n;j++)
             {
                 System.out.print(a[i][j]);
             }
             System.out.println();
         }

     }
}

3 个答案:

答案 0 :(得分:0)

如果对负数或索引的要求大于或等于数组的大小,则JAVA会引发ArrayIndexOutOfBounds异常。这与C / C ++不同,在C / C ++中,没有完成绑定检查的索引。 ArrayIndexOutOfBoundsException是仅在运行时抛出的Runtime异常。

答案 1 :(得分:0)

较小的循环修正

import java.util.*;
public class HelloWorld{

     public static void main(String []args){

         Scanner scan = new Scanner(System.in);
         //System.out.println("Enter n");
         int n = scan.nextInt();
         System.out.println(n);
         int a[][]= new int[n][n];
         int b=0;
         int mid = n/2 +1;
         for(int i=0;i<n;i++)
         {
             for(int j=0;j<n;j++) //minor correction here
             {
                 if(i+j==mid)
                 {
                     a[i][j]=n-b;
                     b++;
                 }
                 else
                 {
                    a[i][j]=n;
                 }


             }
         }
         for(int i=0;i<n;i++)
         {
             for(int j=0;j<n;j++)
             {
                 System.out.print(a[i][j]);
             }
             System.out.println();
         }

     }
}

答案 2 :(得分:0)

看这行:

for(int j=0;i<n;j++)

您增加而“ i

(也有一个小小的注解,通常最好以for循环增量编写++ i或++ j。这不是一个规则,对于大多数oldscool c-Devs来说更容易阅读)。还可以考虑留出空间以提高可读性:

import java.util.*;
public class HelloWorld {

public static void main(String[] args) {

    Scanner scan = new Scanner(System.in);
    // System.out.println("Enter n");
    int n = scan.nextInt();
    System.out.println(n);
    int a[][] = new int[n][n];
    int b = 0;
    int mid = n / 2 + 1;
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (i + j == mid) {
                a[i][j] = n - b;
                b++;
            } else {
                a[i][j] = n;
            }
        }
    }

    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            System.out.print(a[i][j]);
        }
        System.out.println();
    }
}