矩阵中的ArrayIndexOutOfBoundsException

时间:2014-01-13 20:38:53

标签: java arrays matrix indexoutofboundsexception

我想打印一个大小为(m + 1 X n + 1)的矩阵,其中m& n是用户输入的两个字符串的长度。当我打印矩阵时,为什么会出现ArrayIndexOutofBounds Exception?

import java.util.*;
import java.io.File;
public class Strings {

private static int alen ,blen;
int [][] matrix = new int[alen+1][blen+1];
public static void main(String[] args){

    Strings String1 = new Strings();
    String a,b;
    System.out.println("Enter String a: ");
    Scanner usrip = new Scanner(System.in);
    a = usrip.next();
    alen = a.length();
    System.out.println("Enter String b: ");
    b = usrip.next();
    blen = b.length();
    usrip.close();
    System.out.println("Matrix size:  " +  alen + "X" + blen );
    String1.printMatrix();
    /*System.out.println("Execute populate method: ");
    String1.populateMatrix();*/


}//end of main

public void printMatrix(){

    for(int i=0;i<alen+1;i++)
    {
        for(int j=0;i<blen+1;j++)
        {
            System.out.print(matrix[i][j]);
        }
        }
    }//end of printMatrix

示例运行:

Enter String a: 
apple
Enter String b: 

java
Matrix size:  5X4
0Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at Strings.printMatrix(Strings.java:38)
at Strings.main(Strings.java:25)

6 个答案:

答案 0 :(得分:3)

您太早创建了2D数组。有了这条线:

int [][] matrix = new int[alen+1][blen+1];

alenblen仍为0(默认初始值),因此您创建了1x1矩阵。

alen中初始化blenmain之前,请不要创建它:

blen = b.length();
usrip.close();
// Now create it:
String1.matrix = new int[alen+1][blen+1];
System.out.println("Matrix size:  " +  alen + "X" + blen );

将这样的初始化逻辑移动到构造函数会更清晰。这样的构造函数将alenblen作为参数并在那里创建矩阵。

此外,此行看起来不正确,在循环i时检查j

for(int j=0;i<blen+1;j++)

尝试

for(int j=0;j<blen+1;j++)

答案 1 :(得分:1)

在从用户读取变量alenblen之前初始化数组时,您正在创建一个长度为0的数组。在主方法结束之前不要初始化矩阵,这样就可以初始化为所需的大小。

//...
usrip.close();
System.out.println("Matrix size:  " +  alen + "X" + blen );
//initialize here.
int [][] matrix = new int[alen+1][blen+1];
String1.printMatrix();

此外,您将从0迭代到矩阵宽度和高度+1。这意味着您引用的索引不存在,因为java中的数组是零索引的。意思是他们从0开始,而不是从1开始。只需删除打印矩阵方法中的+1即可。

public void printMatrix(){
    for(int i=0;i<alen;i++)
    {
       for(int j=0;i<blen;j++)
       {
           System.out.print(matrix[i][j]);
       }
    }
}//end of printMatrix

答案 2 :(得分:0)

尝试使用:

for(int i=0;i<alen;i++)

并且:

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

答案 3 :(得分:0)

你试图在alen和blen的值建立之前分配'matrix',所以你分配的矩阵是1x1。

答案 4 :(得分:0)

这应该按预期工作

    import java.util.*;
    import java.io.File;
    public class stringclass {

    private static int alen ,blen;
    static int [][] matrix = new int[alen][blen];
    public static void main(String[] args){

      stringclass String1 = new stringclass();
      String a,b;
      System.out.println("Enter String a: ");
      Scanner usrip = new Scanner(System.in);

      a = usrip.next();
      alen = a.length();
      System.out.println("Enter String b: ");

      b = usrip.next();
      blen = b.length();
      usrip.close();
      System.out.println("Matrix size:  " +  alen + "X" + blen );
      String1.printMatrix(matrix);
     /*System.out.println("Execute populate method: ");
      String1.populateMatrix();*/


      }//end of main



   public void printMatrix(int[][] matrix){

               for(int i=0;i<matrix.length;i++)
    {
    for(int j=0;i<matrix[i].length;j++)
    {
        System.out.print(matrix[i][j]);
    }
    }
    }}

答案 5 :(得分:0)

试试这个

for(int j=0;i<blen[i];j++){ statements }
insted of 
for(int j=0;i<blen;j++){ statements}
hope this will solve your problem