-2

我似乎无法弄清楚我如何没有得到正确的输出

int [] f = {1,2,3,4,5,5,4,3,2,1};
int [] b = {0,3,3};
System.out.println(Arrays.toString(hide(f,b)));

    // declare int array that will be returned by following method
int [] hiddenAt = {};

public static int [] hide(int [] front, int [] back) {
    if (back.length > front.length) {
        System.exit(0);
    }

    for(int x = 0; x < (front.length - 1); x++){
        for(int y = 0; y < (back.length - 1); y++){
            int temp = front[y];

            if (front[y] - back[y] <= front[y] && front[y] - back[y]  >= 0 ) {
                hiddenAt.add(temp);
            }

        }
    }
    return hiddenAt;
}

我正在尝试比较第一个和第二个数组,以便找到第二个数组适合第一个数组的位置,而不会超过第一个数组的最大值,所以......

第一次通过循环:0 与 1 进行比较,2 与 3 进行比较,然后 3 与 3 进行比较(这不起作用)第二次移动位置:0 与 2、2 与 3、3 与 4(有效)第三次: 0 和 3,3 和 4,然后 3 和 5(再次工作)

然后对于数组中的每个位置,它都会返回带有这些值的数组,因此在此示例中将是 front[1]、front[2]、front[3] 等等,这样返回的数组看起来像 {1, 2 , 3 ... }

4

2 回答 2

4

你没有使用 x 所以外循环没有做它的工作。使用前[x] 和后[y]

于 2013-10-07T16:30:52.807 回答
0

您的循环需要如下所示:

for(int x = 0; x < (front.length); x++){
    for(int y = 0; y < (back.length); y++){
        int temp = front[y];

        if (front[x] - back[y] <= front[x] && front[x] - back[y]  >= 0 ) {
            hiddenAt.add(temp);
        }

    }
}

您还需要从长度中取出 -1,例如前面的长度为 10。因此数组从 0 开始从 0 到 9,即 -1 从 0 到 8 有 10 个不同的值失去了你的价值观。如果您使用 <= 而不是 <,则可以保留 -1。

写在一张纸上,并在您逐步浏览数组时指向数组中的每个点,并从字面上查看如果这没有得到您的结果会发生什么。

于 2013-10-07T16:56:49.643 回答