【问题标题】:Trying to get my for loop working试图让我的 for 循环工作
【发布时间】:2016-01-09 19:23:45
【问题描述】:

所以此时我不知道为什么我的for 循环不起作用。这可能只是一个小错误,但我找不到它,所以我很感激你的帮助。看起来是这样的:

int[] values = new int[array1.length];
for (int i = 0; i < array1.length; i++) {
    for (int x = 0; x >= array1[i][0] && x <= array1[i][2]; x++) {
        for (int y = 0; y >= array1[i][1] && y <= array1[i][3]; y++) {
            values[i] += array2[x][y];
        }
    }
}         

我用来测试它的数字和一些上下文:

两个数组都是二维的, array1 看起来像这样:

(array1.length = 8) 和array2 像这样:

array1array2 中保存区域左上角和右下角的坐标,例如0 0 2 1array2[0][0]array2[2][1] 的坐标,我正在尝试获取我的@987654338 @循环添加该区域中的所有数字。所以对于这个例子,它将添加这四个数字:

我的输出是:3 0 0 0 0 0 0 0

【问题讨论】:

  • 我不太明白……这 4 个带下划线的数字不应该是 0,0 到 1,1 之间的坐标(即 0 0 1 1)?
  • 所以基本上它应该在坐标(在本例中为 (0,0) 和 (2,1))之间“创建”一个矩形,并在其中添加所有数字。
  • 澄清一下,在这种情况下所需的输出是什么?

标签: java arrays for-loop logic


【解决方案1】:

您应该使用明确的变量名,以免在含义上出现错误。 此外,在预期坐标处开始您的循环。所以你的循环可以这样写:

int[] values = new int[array1.length];
for (int i = 0; i < values.length; i++) {
    int fromX = array1[i][0];
    int fromY = array1[i][1];
    int toX = array1[i][2];
    int toY = array1[i][3];

    for (int x = fromX; x <= toX; x++) {
        for (int y = fromY; y <= toY; y++) {
            values[i] += array2[x][y];
        }
    }
}

您可以查看结果:

System.out.println( Arrays.toString( values) );
// Output is [3, 0, 4, -2, 0, 1, -2, 3]

【讨论】:

    【解决方案2】:

    我认为您应该这样做(添加 =)并更改 statring 值。还要考虑用零填充“值”,因为您正在总结它。

                    for (int x = array1[i][0]; x >= array1[i][0] && x =< array1[i][2]; x++) {
                        for (int y = array1[i][1]; y >= array1[i][1] && y =< array1[i][3]; y++) {
                            values[i] += array2[x][y];
                        }
                    }
    

    【讨论】:

    • 现在我的输出是'3 0 0 0 0 0 0 0`而不是0 0 0 0 0 0 0 0
    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 2020-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多