为什么嵌套的 for 循环用于从另一个二维数组 returns 0 生成二维数组作为每个内部数组的最后一个索引?
Why does nested for loops used to generate a 2D array from another 2D array returns 0 for last index of each inner array?
我想从这个数组构建一个列数组,目标是让这个方法接受锯齿状的 array
I.E.不是正方形或矩形,例如我的代码示例中的 on 是矩形。正如您从我的输出中看到的那样,一个内部数组的每个第 4 个索引都等于零,尽管看起来分配它时的值实际上等于 sales 数组中的正确值。请注意,在 main 方法中,当我输出 salesByColumn[2][4]
时,该值为 0.0
(这是控制台的最后一个条目)。如果您查看 Sales class,其中用于生成此 2D 数组的方法在分配 salesByColumn 时会像 salesByColumn[ i ][ j ]
,因此您可以确定在分配该索引时 i = 2
和 j = 4
。该方法将 salesByColumn[2][4]
分配给 sales[4][2]
,如果您观察销售数组 sales[4][2] = 2391.0.
在方法内部,我还会在调用该方法时打印 sales[4][2]
的值,您可以在输出的顶部看到它的计算结果为 2391.0.
那么为什么在调用和迭代该方法时将其分配给 0.0?感谢您的时间和考虑。
主要CLASS
public class Main {
public static void main(String[] args) {
double[][] salesByColumn = Sales.salesByColumn();
for(double[] column : salesByColumn) {
for(double sale : column) {
System.out.println(sale);
}
System.out.println();
}
System.out.println(salesByColumn[2][4]);
}
}
销售额 CLASS
public class Sales {
static double[][] sales = {
{1540.0, 2010.0, 2450.0, 1845.0},
{1130.0, 1168.0, 1847.0, 1491.0},
{1580.0, 2305.0, 2710.0, 1284.0},
{1105.0, 4102.0, 2391.0, 1576.0},
{1105.0, 4102.0, 2391.0, 1576.0}
}
public static double[][] salesByColumn() {
int maxColumns = 0;
for(double[] row : sales) {
if(row.length > maxColumns) {
maxColumns = row.length;
}
}
System.out.println("Look here " + sales[4][2]);
double[][] salesByColumn = new double[maxColumns][];
for(int i = 0; i < maxColumns; i++) {
salesByColumn[i] = new double[(sales.length)];
for(int j = 0; j < sales[i].length; j++) {
salesByColumn[i][j] = sales[j][i];
}
}
return salesByColumn;
}
}
输出
run:
Look here 2391.0
1540.0
1130.0
1580.0
1105.0
0.0
2010.0
1168.0
2305.0
4102.0
0.0
2450.0
1847.0
2710.0
2391.0
0.0
1845.0
1491.0
1284.0
1576.0
0.0
0.0
BUILD SUCCESSFUL (total time: 0 seconds)
您的内部循环中的索引不正确。您不想遍历 sales[i]
的长度,您需要总行数,以便可以将每一行变成一列。
这是一个工作循环
System.out.println("Look here " + sales[4][2]);
double[][] salesByColumn = new double[maxColumns][];
for(int i = 0; i < maxColumns; i++) {
salesByColumn[i] = new double[(sales.length)];
for(int j = 0; j < sales.length; j++) {
System.out.println("Assigning "+i+", "+j+" to" +sales[j][i]);
salesByColumn[i][j] = sales[j][i];
}
}
如果您的实际输入数据确实像您提到的那样参差不齐,那么您需要在内循环中进行索引检查。
我想从这个数组构建一个列数组,目标是让这个方法接受锯齿状的 array
I.E.不是正方形或矩形,例如我的代码示例中的 on 是矩形。正如您从我的输出中看到的那样,一个内部数组的每个第 4 个索引都等于零,尽管看起来分配它时的值实际上等于 sales 数组中的正确值。请注意,在 main 方法中,当我输出 salesByColumn[2][4]
时,该值为 0.0
(这是控制台的最后一个条目)。如果您查看 Sales class,其中用于生成此 2D 数组的方法在分配 salesByColumn 时会像 salesByColumn[ i ][ j ]
,因此您可以确定在分配该索引时 i = 2
和 j = 4
。该方法将 salesByColumn[2][4]
分配给 sales[4][2]
,如果您观察销售数组 sales[4][2] = 2391.0.
在方法内部,我还会在调用该方法时打印 sales[4][2]
的值,您可以在输出的顶部看到它的计算结果为 2391.0.
那么为什么在调用和迭代该方法时将其分配给 0.0?感谢您的时间和考虑。
主要CLASS
public class Main {
public static void main(String[] args) {
double[][] salesByColumn = Sales.salesByColumn();
for(double[] column : salesByColumn) {
for(double sale : column) {
System.out.println(sale);
}
System.out.println();
}
System.out.println(salesByColumn[2][4]);
}
}
销售额 CLASS
public class Sales {
static double[][] sales = {
{1540.0, 2010.0, 2450.0, 1845.0},
{1130.0, 1168.0, 1847.0, 1491.0},
{1580.0, 2305.0, 2710.0, 1284.0},
{1105.0, 4102.0, 2391.0, 1576.0},
{1105.0, 4102.0, 2391.0, 1576.0}
}
public static double[][] salesByColumn() {
int maxColumns = 0;
for(double[] row : sales) {
if(row.length > maxColumns) {
maxColumns = row.length;
}
}
System.out.println("Look here " + sales[4][2]);
double[][] salesByColumn = new double[maxColumns][];
for(int i = 0; i < maxColumns; i++) {
salesByColumn[i] = new double[(sales.length)];
for(int j = 0; j < sales[i].length; j++) {
salesByColumn[i][j] = sales[j][i];
}
}
return salesByColumn;
}
}
输出
run:
Look here 2391.0
1540.0
1130.0
1580.0
1105.0
0.0
2010.0
1168.0
2305.0
4102.0
0.0
2450.0
1847.0
2710.0
2391.0
0.0
1845.0
1491.0
1284.0
1576.0
0.0
0.0
BUILD SUCCESSFUL (total time: 0 seconds)
您的内部循环中的索引不正确。您不想遍历 sales[i]
的长度,您需要总行数,以便可以将每一行变成一列。
这是一个工作循环
System.out.println("Look here " + sales[4][2]);
double[][] salesByColumn = new double[maxColumns][];
for(int i = 0; i < maxColumns; i++) {
salesByColumn[i] = new double[(sales.length)];
for(int j = 0; j < sales.length; j++) {
System.out.println("Assigning "+i+", "+j+" to" +sales[j][i]);
salesByColumn[i][j] = sales[j][i];
}
}
如果您的实际输入数据确实像您提到的那样参差不齐,那么您需要在内循环中进行索引检查。