检查数组的每个元素是否属于一组值

时间:2018-02-20 19:27:19

标签: java arrays

我需要创建一个布尔方法,如果每个元素都是9,1或6,则返回true。

public static void main(String[] args) {
    int[] nums1 = { 1, 9, 1, 6 };
    int[] nums2 = { 1, 9, 2, 6 };
    int[] nums3 = { 1 };

    System.out.println(isOnly916(nums1)); // should be true
    System.out.println(isOnly916(nums2)); // should be false
    System.out.println(isOnly916(nums3)); // should be true
}

public static boolean isOnly916(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == 9 || arr[i] == 6||arr[i] == 1 ) {
            return true;
        }
    }
    return false;
}

程序对所有这些程序都返回true,但它应该为第二个返回false。

4 个答案:

答案 0 :(得分:4)

问题在于您的方法。它将在第一次遇到1,6或9时返回true。该方法将根据第一个索引返回true,因为每个数组都以1开头(返回true)。您需要更改代码以在第一次遇到非1,6或9时返回false,并在循环结束后返回true。你的方法应该是这样的:

public boolean method(int [] arr) {
    for(int i = 0; i < arr.length; i++)
    {
        if(!(arr[i] == 1 || arr[i] == 6 || arr[i] == 9))
            return false;
    }
    return true;
}

答案 1 :(得分:4)

说明

仔细查看您的代码:

public static boolean isOnly916(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] == 9 || arr[i] == 6 || arr[i] == 1 ) {
            return true;
        }
    }
    return false;
} 

如果某个元素的条件评估为true,则会立即确定整个方法的结果为true,而不是先检查所有元素。

这意味着如果您有一个像

这样的数组
int[] arr = new int[] { 1, 2, 3 };

您的方法首先会查看条件评估为1的{​​{1}}。因此该方法执行

true

结束方法并产生最终结果return true; ,而不先检查true2会产生3

在决定数组不包含任何无效值之前,您需要先查看所有元素

解决方案

因此,请考虑这个稍微修改过的代码

false

带有某种逆转逻辑。

答案 2 :(得分:3)

试试这个

public static void main(String[] args) {
    int[] nums1 = { 1, 9, 1, 6 };
    int[] nums2 = { 1, 9, 2, 6 };
    int[] nums3 = { 1 };

    System.out.println(isOnly916(nums1)); // true
    System.out.println(isOnly916(nums2)); // false
    System.out.println(isOnly916(nums3)); // true
}

public static boolean isOnly916(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        if (!(arr[i] == 6 || arr[i] == 9 || arr[i] == 1)) {
            return false;
        }
    }
    return true;
} 

答案 3 :(得分:2)

问题是你只是评估给定数组的第一个元素,如果是9,6或1则立即返回。

您可以将条件更改为:

public static boolean isOnly916(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        if (arr[i] != 9 && arr[i] != 6 && arr[i] != 1 ) { // if not 9, 6 or 1 then is false
            return false;
        }
    }
    return true; // if none of the array values is different from 9, 6 or 1 then the condition is true
}