这是我的第一个问题。我正在尝试编写一个程序,读取从键盘输入的数组。输入列数后,我得到错误:线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:0
提前致谢。
package Final;
import java.util.*;
public class Final {
int a,b,x,l;
double mat[][][];
Final()
{
a=0;
b=0;
c=0;
d=0;
x=0;
l=0;
}
public void read() {
Scanner citast = new Scanner(System.in);
System.out.println("How many arrays do you want to enter?");
x=citast.nextInt();
for (this.l=0; this.l<x; this.l++)
{
System.out.println("Matrix "+this.l);
System.out.println("Number of lines: ");
this.a = citast.nextInt();
System.out.println("Number of columns: ");
this.b = citast.nextInt();
this.mat= new double [this.l][a][b];
for (int i=0; i<this.a; i++)
{
for (int j=0; j<this.b; j++)
{
System.out.print("Matrice " + l + " ["+ i +"]["+ j +"]= ");
this.mat[l][i][j]=citast.nextInt();
}
System.out.println();
}
}
}
public static void main(String[] args) {
Final a = new Final();
Scanner citast = new Scanner(System.in);
a.read();
System.out.println();
}
}
答案 0 :(得分:4)
this.mat= new double [this.l][a][b];
应该是:
this.mat= new double [x][a][b];
但是你的代码错了,你应该在第一个for循环之前设置数组的维度:
public void read() {
Scanner citast = new Scanner(System.in);
System.out.println("How many arrays do you want to enter?");
x=citast.nextInt();
this.mat = new double[x][][]; //<-- added this line
for (this.l=0; this.l<x; this.l++)
{
System.out.println("Matrix "+this.l);
System.out.println("Number of lines: ");
this.a = citast.nextInt();
System.out.println("Number of columns: ");
this.b = citast.nextInt();
this.mat[l] = new double [a][b]; //<-- modified this line
for (int i=0; i<this.a; i++)
for (int j=0; j<this.b; j++)
{
System.out.print("Matrice " + l + " ["+ i +"]["+ j +"]= ");
this.mat[l][i][j]=citast.nextInt();
}
System.out.println();
}
System.out.println(Arrays.deepToString(mat));
}
包含2个方阵的数组的输出(一个填充4个,一个填充5个):
[[[4.0, 4.0], [4.0, 4.0]], [[5.0, 5.0], [5.0, 5.0]]]
答案 1 :(得分:1)
这应该有效。
首先,您创建一个大小为x
的数组,以容纳任意大小的二维数组。
然后,为每个l
创建一个大小为a
x b
的二维数组,将其放在l
的{{1}}位置,并将值读入其中
mat
答案 2 :(得分:0)
for (int j=0; j<this.b; j++)
{
System.out.print("Matrice " + l + " ["+ i +"]["+ j +"]= ");
this.mat[l][i][j]=citast.nextInt();
}
如果你离开
this.mat[l][i][j] = citast.nextInt();
出于它,然后它正在工作。
此外,你必须使Final()静态并在你的类中声明c和d,因为它们在构造函数中,但是在类中没有对它们的引用。