2014-01-13 58 views
0

我想打印大小爲(m + 1 X n + 1)的矩陣,其中m & n是用戶輸入的兩個字符串的長度。當我打印矩陣時,爲什麼會出現ArrayIndexOutofBounds異常?矩陣中的ArrayIndexOutOfBoundsException

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) 

回答

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++) 
+0

謝謝你,當我推矩陣初始化爲主要方法,你說,我的mehtod不承認所謂的矩陣對象,它說「矩陣不能解析爲變量」。 – ZeExplorer

0

嘗試使用:

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

和:

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

您正在創建0長度的數組的數組變量初始化之前alen和已從用戶讀取blen。在你的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 
0

您正在嘗試阿倫和BLEN的值之前分配「矩陣」已經建立,所以你分配矩陣是1x1的。

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