我需要创建一个布尔方法,如果每个元素都是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。
答案 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;
,而不先检查true
和2
会产生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
}