添加锯齿状数组初学者
Adding jagged arrays beginner
我是 java 的初学者,为此苦苦挣扎:
我正在尝试对两个大小相同的锯齿状数组(n 和 m,都是双精度 [][])求和(每个数组在第一级的长度为 3,然后是长度 x-1、x 和 x-二级各1人)。
我遇到的问题是指定锯齿状数组中每个数组的长度,目前我的代码正在生成 n x n 数组,因为我已将长度指定为 n[1] 而不是作为参数,但如果我尝试使用 sum[i].length=n[i].length,我会得到错误 "cannot assign value to final variable"。所以我知道这部分是错误的,但我不知道什么是正确的...
感谢您的帮助!
我的代码:
else if (isValidTridiagonal(m)== true && isValidTridiagonal (n) == true)
{
int size = n[1].length; /** specifying all lengths to be x where they shouldnt be*/
sum = new double[3][size];
for (int i = 0; i < n.length; i++)
{
for(int j = 0; j< n[i].length; j++)
{
sum [i][j]= n[i][j] + m [i][j];
}
}
return sum;
}
缺少一些信息。据我所知,您需要修复两件事。您似乎已经在代码中定义了 "sum" 作为最终变量。
其次,您正在声明一个 3xsize 大的新数组。如果你想要一个锯齿状的数组,你必须将其中一个括号留空,并在第一个循环中插入一个所需大小的新数组。
double[][] sum = new double[3][]; //Make sure this is unique within the scope
for(int i = 0; i < 3; i++) { //if you want dynamic scaling you'll need to replace 3 in the array as well.
int size = n[i].length; //size of the new row
sum[i] = new double[size]; // Inserting a new array of the wanted size
for(int j = 0; j< sum[i].length; j++)
{
sum[i][j]= n[i][j] + m[i][j];
}
}
return sum;
问题可能出在这一行:
sum = new double[3][size];
此处您创建了一个大小为 [3][2]
的不正确的非锯齿数组
当您尝试设置 sum[1][2](第 2、3 个索引)时,您将无法设置。
否则,代码看起来是正确的,我得到了一个可以使用的总和:
public static void main(String[] args) {
int[][] n = new int[3][];
n[0] = new int[2];
n[0][0] = 1;
n[1] = new int[3];
n[2] = new int[2];
int[][] m = new int[3][];
m[0] = new int[2];
m[1] = new int[3];
m[1][2] = 1;
m[2] = new int[2];
int[][] sum = new int[3][];
sum[0] = new int[2];
sum[1] = new int[3];
sum[2] = new int[2];
for (int i = 0; i < n.length; i++) { // n.length will be 3
for (int j = 0; j < n[i].length; j++) { // n[i].length will be 2, 3 and 2
sum[i][j] = n[i][j] + m[i][j];
}
}
System.out.println("Sum: ");
for (int i = 0; i < sum.length; i++) {
for (int j = 0; j < sum[i].length; j++) {
System.out.print(sum[i][j] + "|");
}
System.out.println();
}
}
这将打印出来:
Sum:
1|0|
0|0|1|
0|0|
我是 java 的初学者,为此苦苦挣扎:
我正在尝试对两个大小相同的锯齿状数组(n 和 m,都是双精度 [][])求和(每个数组在第一级的长度为 3,然后是长度 x-1、x 和 x-二级各1人)。
我遇到的问题是指定锯齿状数组中每个数组的长度,目前我的代码正在生成 n x n 数组,因为我已将长度指定为 n[1] 而不是作为参数,但如果我尝试使用 sum[i].length=n[i].length,我会得到错误 "cannot assign value to final variable"。所以我知道这部分是错误的,但我不知道什么是正确的...
感谢您的帮助!
我的代码:
else if (isValidTridiagonal(m)== true && isValidTridiagonal (n) == true)
{
int size = n[1].length; /** specifying all lengths to be x where they shouldnt be*/
sum = new double[3][size];
for (int i = 0; i < n.length; i++)
{
for(int j = 0; j< n[i].length; j++)
{
sum [i][j]= n[i][j] + m [i][j];
}
}
return sum;
}
缺少一些信息。据我所知,您需要修复两件事。您似乎已经在代码中定义了 "sum" 作为最终变量。
其次,您正在声明一个 3xsize 大的新数组。如果你想要一个锯齿状的数组,你必须将其中一个括号留空,并在第一个循环中插入一个所需大小的新数组。
double[][] sum = new double[3][]; //Make sure this is unique within the scope
for(int i = 0; i < 3; i++) { //if you want dynamic scaling you'll need to replace 3 in the array as well.
int size = n[i].length; //size of the new row
sum[i] = new double[size]; // Inserting a new array of the wanted size
for(int j = 0; j< sum[i].length; j++)
{
sum[i][j]= n[i][j] + m[i][j];
}
}
return sum;
问题可能出在这一行:
sum = new double[3][size];
此处您创建了一个大小为 [3][2]
的不正确的非锯齿数组当您尝试设置 sum[1][2](第 2、3 个索引)时,您将无法设置。
否则,代码看起来是正确的,我得到了一个可以使用的总和:
public static void main(String[] args) {
int[][] n = new int[3][];
n[0] = new int[2];
n[0][0] = 1;
n[1] = new int[3];
n[2] = new int[2];
int[][] m = new int[3][];
m[0] = new int[2];
m[1] = new int[3];
m[1][2] = 1;
m[2] = new int[2];
int[][] sum = new int[3][];
sum[0] = new int[2];
sum[1] = new int[3];
sum[2] = new int[2];
for (int i = 0; i < n.length; i++) { // n.length will be 3
for (int j = 0; j < n[i].length; j++) { // n[i].length will be 2, 3 and 2
sum[i][j] = n[i][j] + m[i][j];
}
}
System.out.println("Sum: ");
for (int i = 0; i < sum.length; i++) {
for (int j = 0; j < sum[i].length; j++) {
System.out.print(sum[i][j] + "|");
}
System.out.println();
}
}
这将打印出来:
Sum:
1|0|
0|0|1|
0|0|