我有一个java代码,其中X是一个2D数组和一个向其添加数据的循环。代码如下:
public static void main(String [] args0
{
int[] len = new int[3];
double[][] X = null;
double[][] vec = null;
for (int i = 0; i < 3; i++)
{
System.out.println("Enter the len" +(i+1)+":");
len[i] = in.nextInt();
if(i == 0)
{
vec = new double [1][len[i] + 1];
X = new double[1][vec[0].length];
for(int k = 0; k < vec[0].length - 1; k++)
{
Xi[0][k] = 0;
}
Xi[0][ve1[0].length-1] = 1;
}
else
{
vec = new double [1][len[i] + 1];
X = new double[1][vec[0].length];
for(int k = 0; k < vec[0].length - 1; k++)
{
X[0][k] = 0;
}
X[0][vec[0].length-1] = 1;
}
}
}
当我打印X时,我需要在i = 0和i> 0时附加添加的值。但它只打印了所谓的最终迭代的值。如何使其打印附加到每次迭代期间添加的数据末尾的所有迭代的数据?我明白,因为我在每次迭代中创建一个新的double [] [],所以被覆盖的值。但我该如何解决呢?
答案 0 :(得分:0)
您已正确识别出X = new double[1][vec[0].length];
,您始终会覆盖先前迭代的结果。为了解决这个问题,您需要将初始化移出for
循环。以下是如何执行此操作的示例:
public static void main(String [] args) {
int[] len = new int[3];
double[][] X = new double[3][];
Scanner in = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
System.out.println("Enter the len " +(i+1)+":");
len[i] = in.nextInt();
X[i] = new double[len[i]];
for (int j = 0; j < len[i] - 1; j++) {
X[i][j] = 0;
}
X[i][len[i] - 1] = 1;
}
in.close();
}
如您所见,数组X
在大小3
的开头初始化,因为在您的情况下它将始终包含3个一维数组。但是,您也可以动态初始化大小。您不需要vec
变量,因为您始终可以访问刚刚读取并存储在len
中的长度。事实上,您也不需要len
数组,因为它存储了X
中包含的信息:
public static void main(String [] args) {
double[][] X = new double[3][];
Scanner in = new Scanner(System.in);
for (int i = 0; i < 3; i++) {
System.out.println("Enter the len " + (i+1) + ":");
X[i] = new double[in.nextInt()];
for (int j = 0; j < X[i].length - 1; j++) {
X[i][j] = 0;
}
X[i][X[i].length - 1] = 1;
}
in.close();
}