这是我的问题:
编写一个名为
allLess
的方法,它接受两个整数数组,如果第一个数组中的每个元素小于第二个数组中相同索引处的元素,则返回true。如果数组的长度不同,则您的方法应返回false。
这是我的测试数据:
int[] arr1 = {1,2,4};
int[] arr2 = {3};
int[] arr3 = {5,4,6};
int[] arr4 = {2,2,7};
int[] arr5 = {2,3,6,8};
System.out.println(allLess(arr1,arr2)); //should print false
System.out.println(allLess(arr1,arr3)); //should print true
System.out.println(allLess(arr1,arr4)); //should print false
这是我到目前为止的代码:
public static boolean allLess(int[] a, int[] b){
int len1=a.length;
int len2=b.length;
if(len1==len2){
for(int i=0; i<len1;i++)
if(a[i]<b[i])
return true;
}
else if(len1 !=len2)
return false;
return false;
}
然而,当我尝试System.out.println(allLess(arr1,arr4));
时,它的打印是真的。我该如何解决这个问题?
答案 0 :(得分:3)
症结:你应该扫描直到发现不匹配。你目前只是在寻找第一个幸福的案例。
你需要改变的主要部分是你的条件 - 翻转它的条件。
if(a[i] >= b[i]) {
return false;
}
请务必将最后一次返回时更改为true
,因为您已经用尽了所有负面条件,而且您将会非常高兴。
我们应该在这里做更多的清理工作,因为我们正在研究它。
首先,随处使用大括号。这样做,您的代码将更容易理解。如果您突然发现需要在没有大括号的条件块中添加更多内容,也不会遇到错误。
接下来,您不需要为数组的长度声明更多变量 - 您只需要在两个位置关注它们。只需直接引用a.length
和b.length
,因为它不是方法调用;它是一个领域,无需任何费用。
第三,你的else if
条件是多余的;它应该是else
。数组的长度是相等的,或者它们不是。
以下是整体看起来的样子:
public static boolean allLess(int[] a, int[] b) {
if (a.length == b.length) {
for (int i = 0; i < a.length; i++) {
if (a[i] >= b[i]) {
return false;
}
}
} else {
return false;
}
return true;
}
存在对此基本形式的简化。
如果您对以Java 8为中心的方法感兴趣,那么您可以使用流来考虑这种方法。本质上,我们想要扫描所有元素,如果数组的长度不相等则拒绝整个语句,如果 i 中的值不等于b i 子>
public static boolean allLess(int[] a, int[] b) {
return a.length == b.length && IntStream.range(0, a.length)
.allMatch(i -> a[i] < b[i]);
}
答案 1 :(得分:0)
if
语句提前返回,您需要反转逻辑并返回:
if(a[i]>=b[i])
return false;
答案 2 :(得分:0)
此代码仅比较数组的前两个元素。您可以尝试以下方法:
public static boolean allLess(int[] a, int[] b){
int len1=a.length;
int len2=b.length;
if(len1==len2){
for(int i=0; i<len1;i++)
if(!(a[i]<b[i]))
return false;
}
else if(len1 !=len2)
return false;
return true;
}