Java 检查数组的每个元素是否属于一组值
我需要创建一个布尔方法,如果每个元素都是9、1或6,它将返回trueJava 检查数组的每个元素是否属于一组值,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
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;
}