我想打印一个大小为(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)
答案 0 :(得分:3)
您太早创建了2D数组。有了这条线:
int [][] matrix = new int[alen+1][blen+1];
alen
和blen
仍为0
(默认初始值),因此您创建了1x1矩阵。
在alen
中初始化blen
和main
之前,请不要创建它:
blen = b.length();
usrip.close();
// Now create it:
String1.matrix = new int[alen+1][blen+1];
System.out.println("Matrix size: " + alen + "X" + blen );
将这样的初始化逻辑移动到构造函数会更清晰。这样的构造函数将alen
和blen
作为参数并在那里创建矩阵。
此外,此行看起来不正确,在循环i
时检查j
:
for(int j=0;i<blen+1;j++)
尝试
for(int j=0;j<blen+1;j++)
答案 1 :(得分:1)
在从用户读取变量alen
和blen
之前初始化数组时,您正在创建一个长度为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