比较两个数组的元素
Comparing elements of two arrays
我的方法接受两个整数数组和 returns true
如果
- 数组长度相同
- 每个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]
.
我的方法接受两个整数数组和 returns true
如果
- 数组长度相同
- 每个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]
.