Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 检查数组的每个元素是否属于一组值_Java_Arrays - Fatal编程技术网

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

Java 检查数组的每个元素是否属于一组值,java,arrays,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.print

我需要创建一个布尔方法,如果每个元素都是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;
}
publicstaticvoidmain(字符串[]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
}
公共静态布尔值isOnly916(int[]arr){
对于(int i=0;i

程序会为所有这些返回true,但第二个返回false。

问题在于您的方法。它将在第一次遇到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;
}
公共布尔方法(int[]arr){
对于(int i=0;i
问题在于,您只是计算给定数组的第一个元素,如果是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
}
公共静态布尔值isOnly916(int[]arr){
对于(int i=0;i
说明 仔细查看您的代码:

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
1
。因此,该方法执行

return true;
它结束方法并生成最终结果
true
,而不首先检查
2
3
,这将生成
false

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


解决方案

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

public static boolean isOnly916(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        // If value is invalid abort and return 'false'
        if (arr[i] != 9 && arr[i] != 6 && arr[i] != 1 ) {
            return false;
        }
    }

    // Checked all values, non was invalid
    return true;
} 
公共静态布尔值isOnly916(int[]arr){
对于(int i=0;i
使用某种反向逻辑。

试试这个

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;
} 
publicstaticvoidmain(字符串[]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
}
公共静态布尔值isOnly916(int[]arr){
对于(int i=0;i
问题究竟是什么?输出不是如您所期望的那样吗?第二个数组包含一个
2
,它不是
1
6
9
。当第二个数组为false时,程序将为所有数组返回true。请在一张纸上或使用调试器逐指令执行代码,您将看到逻辑中的缺陷。您的方法在找到第一个有效元素时返回true。它应该做相反的事情,它应该为无效的第一个元素返回
false
,在测试所有元素后返回true。注意,流提供了这样的方法:
return IntStream.of(arr).allMatch(i->i==9 | i==6 | i==1)不敢相信我自己看不到)谢谢
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;
}