比较两个数组中的每个元素

时间:2015-10-17 22:03:40

标签: java arrays for-loop

这是我的问题:

  

编写一个名为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));时,它的打印是真的。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:3)

症结:你应该扫描直到发现不匹配。你目前只是在寻找第一个幸福的案例。

你需要改变的主要部分是你的条件 - 翻转它的条件。

if(a[i] >= b[i]) {
    return false;
}

请务必将最后一次返回时更改为true,因为您已经用尽了所有负面条件,而且您将会非常高兴。

我们应该在这里做更多的清理工作,因为我们正在研究它。

首先,随处使用大括号。这样做,您的代码将更容易理解。如果您突然发现需要在没有大括号的条件块中添加更多内容,也不会遇到错误。

接下来,您不需要为数组的长度声明更多变量 - 您只需要在两个位置关注它们。只需直接引用a.lengthb.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;
}