比较两个数组的元素

Comparing elements of two arrays

我的方法接受两个整数数组和 returns true 如果

  1. 数组长度相同
  2. 每个a.element都小于相同索引的b.element。

它适用于我的所有测试用例,但 int[] a = {1, 2, 3}int[] b = {4, 5, 1} 除外。它 returns 正确,即使 a[2] > b[2]digitDifference 检查工作不正常,但我看不到错误。

public static boolean allLess(int[] a, int[] b) {
    int i = 0;
    boolean sameLength = (a.length == b.length);
    boolean digitDifference = (a[i] < b[i]);
    for (i = 0; i <= a.length - 1; i++) {}
    return (sameLength && digitDifference);
}

你的 for 循环什么都不做,所以你只比较数组第一个索引中的元素。

您的代码应如下所示:

public static boolean allLess(int[] a, int[] b) {
    boolean sameLength = (a.length == b.length);
    if (!sameLength)
        return false;
    boolean digitDifference = true;
    for (int i = 0; i <= a.length - 1 && digitDifference; i++) {
        digitDifference = (a[i] < b[i]);
    }
    return digitDifference;
}

现在 for 循环比较每对具有相同索引的元素,并在发现一对违反您的要求 (a[i] < b[i]).

时终止

没有标志的另一个等效实现:

public static boolean allLess(int[] a, int[] b) {
    if (a.length != b.length)
        return false;
    for (int i = 0; i <= a.length - 1; i++) {
        if (a[i] >= b[i])
            return false;
    }
    return true;
}

digitDifference在循环之前初始化,比较两个数组的第一个元素,因为此时i的值为0。您永远不会比较数组的其他元素。比较必须在 内部 循环中完成。

顺便说一句,你的循环体甚至没有一条指令。

您的方法只比较每个数组中的第一个元素 - 比较是在 for 循环(它是空的!)外部而不是内部进行的。把它移到那里,你应该没问题。

值得注意的是,在这种情况下,使用早期的 return 习语将有助于生成更易于阅读的代码,因为您不需要继续 "dragging" 当前状态,只需当条件之一被打破时快速失败:

public static boolean allLess(int[] a, int[] b) {
    if (a.length != b.length) {
        return false;
    }
    for (i = 0; i <= a.length - 1; i++) {
        if (a[i] >= b[i]) {
            return false;
        }
    }
    return true;
}

你有一个检查来比较两个数组的长度,但你只在方法结束时才对它采取行动。 Java,就像任何其他语言一样,您可以在一个方法中使用多个 return 语句,因此我的建议是在您执行检查后立即从该方法中 return:

if (a.length != b.length)
   return false;

其次,代码中的 digitDifference 语句只计算一次,数组中的第一个元素。我相信,您希望 for 循环对数组中的每个元素执行多次比较,但是,您将循环体留空。

for (i = 0; i <= a.length - 1; i++) {
    if(a[i] >= b[i])
       return false;
}

同样,我的建议是 return 一旦您发现其中一个元素违反了您的约束。并且在 for 循环之后有一个 return true;,这将表明所有元素都满足约束 a[i] >= b[i].