[英]Even/odd values in an array
我在使用 boolean 方法時遇到問題,我想檢查數組是偶數、奇數還是兩者都不是。 我輸入了數組大小和數組值,但是“isArrayEven”方法一直輸出“數組中的所有數字都是偶數”,即使我的數組是 1,2,3 並且 isArrayEven 應該是假的。
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");
}
}
}
我
你回來得太早了。 您需要稍微翻轉和修改您的 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;
}
這里我稍微修改了 if 語句。
在isArrayEven
方法中,我在第一次出現奇數時返回false
。 如果沒有出現odd
,我返回true
。
在isArrayOdd
方法中,我在第一次出現偶數時返回false
。 如果沒有偶數出現,我返回true
。
在我看來,您的測試和返回值應該倒置。 當您只找到一個偶數時,您現在將返回 "the entire array is even"=true 。 您必須檢查所有值,或者當您發現任何不在“偶數”function 中的值時返回 false。
一般來說,我建議最好迭代一次數組並在迭代之前初始化兩個布爾值; 例如。 “all_are_odd”和“all_are_even”並將它們初始化為 true;
然后只需迭代整個數組一次,並且僅在遇到不滿足 all_are_x 的值時才將 all_are_x 設置為 false。
一旦 all_are_odd / all_are_even 都為假,您可以通過跳出循環來進行優化。
在這次迭代之后,您現在可以 output 是偶數、奇數還是介於兩者之間。
邊緣情況當然是空集。
你的錯誤是只要你找到偶數或奇數,你就會返回 true 或 false。 這意味着假設您有一個 integer 數字[2, 1, 3, 5]
的數組。 當您為此數組運行 isEven 方法時,它將返回 true,但數組的第一個、第二個和第三個值是奇數。 你需要做的與你現在正在做的相反。
public boolean isEven(int arr[]){
for(int i=0; i<arr.length; ++i)
if(arr[i]%2 !=0) return false;
return true;
}
如果在數組中找到奇數,則應發送 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
}
我有點同意理查德的觀點,你需要一些 boolean 變量,但我會采取不同的方法:
boolean containsEven = false; boolean containsOdd = false;
循環遍歷數組中的所有元素,找到偶數后立即將第一個 boolean 更改為 true。 同樣,一旦找到奇數,將第二個 boolean 更改為 true。 如果兩個布爾值都為真,您甚至可以考慮提前打破循環,因為從檢查數組的 rest 中沒有什么可以進一步學習的。
然后,在您的 if/else 塊中使用這些布爾值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.