【问题标题】:ArrayIndexOutOfBoundsException in matrix矩阵中的 ArrayIndexOutOfBoundsException
【发布时间】:2014-02-01 18:21:41
【问题描述】:

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

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)

【问题讨论】:

    标签: java arrays matrix indexoutofboundsexception


    【解决方案1】:

    试试这个

    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
    

    【讨论】:

      【解决方案2】:

      这应该按预期工作

          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]);
          }
          }
          }}
      

      【讨论】:

        【解决方案3】:

        您过早地创建了二维数组。用这一行:

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

        alenblen 仍然是 0(它们的默认初始值),因此您创建了一个 1x1 矩阵。

        main 中初始化 alenblen 之前不要创建它:

        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 作为参数并在那里创建矩阵。

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

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

        试试

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

        【讨论】:

        • 谢谢,当我将矩阵初始化推入主方法到您所说的位置时,我的方法无法识别称为矩阵的对象,它说“矩阵无法解析为变量”。
        【解决方案4】:

        您正在尝试在 alen 和 blen 的值建立之前分配“矩阵”,因此您分配的矩阵是 1x1。

        【讨论】:

          【解决方案5】:

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

          //...
          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
          

          【讨论】:

            【解决方案6】:

            尝试使用:

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

            还有:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-04-02
              • 1970-01-01
              • 1970-01-01
              • 2016-09-01
              • 1970-01-01
              • 2017-05-10
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多