Java 数组中的偶数/奇数值
我在使用布尔方法时遇到问题,我想检查数组的所有值是否为偶数、奇数或两者都不是。我输入数组大小和数组值,但是“IsArrayEvent”方法一直输出“数组中的所有数字都是偶数”,即使我的数组是1,2,3,IsArrayEvent应该是falseJava 数组中的偶数/奇数值,java,arrays,boolean,Java,Arrays,Boolean,我在使用布尔方法时遇到问题,我想检查数组的所有值是否为偶数、奇数或两者都不是。我输入数组大小和数组值,但是“IsArrayEvent”方法一直输出“数组中的所有数字都是偶数”,即使我的数组是1,2,3,IsArrayEvent应该是false import java.util.Scanner; public class OddOrEven { public static boolean isArrayEven(int[] arrayValues, int arraySize)
import java.util.Scanner;
public class OddOrEven {
public static boolean isArrayEven(int[] arrayValues, int arraySize){
for(int i = 0; i <= arraySize -1; i++)
{
if(arrayValues[i] % 2 == 0)
{
return true;
}
}
return false;
}
public static boolean isArrayOdd(int[] arrayValues, int arraySize){
for(int i = 0 ; i < arraySize ; i++)
{
if(arrayValues[i] % 2 == 1)
{
return true;
}
}
return false;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int arraySize = scan.nextInt();
int[] arrayValues = new int[arraySize];
for(int i = 0; i <= arraySize-1; i++)
{
arrayValues[i] = scan.nextInt();
}
if(isArrayEven(arrayValues,arraySize) == true)
{
System.out.println("all numbers in array is even");
}else if(isArrayOdd(arrayValues,arraySize) == true)
{
System.out.println("all numbers in arrat is odd");
}else if(isArrayEven(arrayValues,arraySize) == false && isArrayOdd(arrayValues,arraySize) == false)
{
System.out.println("both have even and odd");
}
}
}
import java.util.Scanner;
公共级奥多列文{
公共静态布尔值IsArrayEvent(int[]ArrayValue,int arraySize){
对于(int i=0;i在我看来,您的测试和返回值应该是反向的。当您只找到一个偶数时,您现在将返回“整个数组为偶数”=true。您必须检查所有值,或者当您找到“is-even”函数中不为偶数的任何值时,返回false
一般来说,我建议最好迭代数组一次,并在迭代之前初始化两个布尔值;例如,“all_是奇数”和“all_是偶数”,并将它们初始化为true
然后,只需迭代整个数组一次,如果遇到一个值不满足所有的值,则只需将all_are_x设置为false
一旦all_为奇数/all_为偶数都为假,您可以通过打破循环进行优化
在这个迭代之后,您现在可以输出所有是偶数、奇数还是介于两者之间的值
Edge case当然是空集。您返回得太早了。您需要稍微翻转并修改if语句。请查看以下内容:
public static boolean isArrayEven(int[] arrayValues, int arraySize){
for(int i = 0; i <= arraySize -1; i++)
{
if(arrayValues[i] % 2 != 0)
{
return false;
}
}
return true;
}
public static boolean isArrayOdd(int[] arrayValues, int arraySize){
for(int i = 0 ; i < arraySize ; i++)
{
if(arrayValues[i] % 2 == 0)
{
return false;
}
}
return true;
}
公共静态布尔IsArrayEvent(int[]数组值,int arraySize){
对于(int i=0;i您的错误在于,每当您找到偶数或奇数时,都会返回true或false。这意味着您有一个整数数组[2,1,3,5]
。当为该数组运行isEven方法时,它将返回true,但数组的第1、第2和第3个值是奇数。您需要做的与您现在所做的相反
public boolean isEven(int arr[]{
对于(int i=0;i,若在数组中找到奇数,则应发送false,若数组中的所有元素均为偶数,则应返回true
public static boolean isArrayEven(int[] arrayValues, int arraySize){
for(int i = 0; i <= arraySize -1; i++) {
if(arrayValues[i] % 2 != 0) { // if found an odd number
return false;
}
}
return true; // if not found any odd number means all number is even
}
公共静态布尔IsArrayEvent(int[]数组值,int arraySize){
对于(int i=0;i我有点同意Richard的观点,你需要一些布尔变量,但我会采取不同的方法:
布尔值=false;
布尔值containsOdd=false
循环遍历数组中的所有元素,一旦找到偶数,第一布尔变为真。同样,一旦找到奇数,就将第二布尔变为真。如果两个布尔值都变为真的话,你甚至可以考虑提前中断循环,因为没有什么可以从检查其余部分中学习到。数组的一部分
然后,在if/else块中使用这些布尔值。您需要反转布尔检查语句,如果检查通过,则返回false
。例如,当值为奇数时,应在isArrayEven方法中直接返回false。