我需要在生成矩阵期间使用动态数据结构,但最终矩阵显示为列表,这看起来非常不舒服。 这就是我决定添加2D数组的原因。 但是当我启动它时,我得到一个ArrayIndexOutOfBoundsException:0错误。尝试了一切,但它仍然无法正常工作。有什么想法可以纠正吗?
List<Integer> J = null;
static int ord;
static int ord1;
static int notZero;
static int val=0;
public static int[][] array;
public Matrix(){
int numberCol;
A=new LinkedList<ElementStructure>();
x=new LinkedList<ElementStructure>();
b=new LinkedList<ElementStructure>();
J = new LinkedList<Integer>();
array = new int[ord][ord];
Random rand= new Random();
System.out.print("Enter matrix order ");
Scanner scn = new Scanner(System.in);
ord = scn.nextInt();
ord1=ord/2;
for (int i=0; i<ord;i++){
for( int j=0; j<ord; j++){
if(j==ord-i-1){
J.add(j);
int q = rand.nextInt(201)-100;
A.add(new ElementStructure(i,j,q));
array[i][j] = q;
val++;
break;
} else if(ord<20){notZero=ord/2;}
else { notZero=rand.nextInt(ord);}
for(int k=0; k<notZero; k++){
numberCol=rand.nextInt(ord);
if(J.contains(numberCol)){continue;}
J.add(numberCol);
int q = rand.nextInt(201)-100;
A.add(new ElementStructure(i,numberCol, q));
array[i][numberCol] = q;
val++;
}
break;
}
}
}
public static void main(String[] args) throws IOException {
Matrix Matrix = new Matrix();
for (int c=0; c<Matrix.val; c++){
System.out.println(Matrix.A.get(c).toString());
}
for (int i = 0;i < ord;i++){
for (int j = 0;j < ord;j++){
System.out.print(array[i][j] + " ");
}
System.out.println();
}
}
答案 0 :(得分:0)
在为ord分配值之后应该声明下一行,因为你用ord初始化数组为0,这就是数组长度为0的原因,并引发了ArrayIndexOutOfBoundsException。
array = new int[ord][ord];