簡體   English   中英

兩個偶數和兩個奇數並排出現

[英]Two even and two odd numbers appear next to each other

給定一個整數數組,如果兩個偶數和兩個奇數在數組中相鄰出現,則打印真

我試圖使用“Boolean”來解決這個問題,但沒有得到預期的結果。

int[] arr={2,4,5,7,8,9,10};
int len=arr.length;
boolean bool = true;

for (int i=0; i<len-1; i++)
{
    int n=arr[i];
    int m=arr[i+1];
    if (n%2==0 && m%2==0)
    {
        for (int j=i+2; j<len-1; j++)
        {
            int a=arr[j];
            int b=arr[j+1];
            if (a%2!=0 && b%2!=0)
            {
                bool=true;
                break;
            }
            else
                bool=false;
        }
    }
    else
    {
        for (int j=i+2; j<len-1; j++)
        {
            int a=arr[j];
            int b=arr[j+1];
            if (a%2==0 && b%2==0)
            {
                bool=true;
                break;
            }
            else
                bool=false;
        }
    }
}
System.out.println("2Odd+2Even:"+bool);

預期結果2Odd+2Even:true

實際結果2Odd+2Even:false

問題是你的break; 只退出內循環。 即使在您找到匹配項之后,您仍然會繼續外部循環,這將在下一次迭代中將bool設置為 false。
無需改變太多,您只需添加

if(bool){
    break;
}

在您找到匹配項后,在您的外循環結束時離開它。

你的代碼比它需要的要復雜一些; 盡量讓你的程序盡可能簡單。 在開始編寫代碼之前,請仔細考慮實現目標所需的步驟並將其列出。 在這種情況下,您只需要檢查數組中每組 4 個相鄰元素。

像這樣的東西:

public static void main(String[] args) {
    int[] a = { ... };
    System.out.println("2Odd+2Even:" + has2Odd2Even(a));
}

public static boolean has2Odd2Even(int[] a) {
    int end = a.length - 4;
    for (int i = 0; i <= end; i++) {
        if (odd(a[i])) {
            if (odd(a[i + 1]) && !odd(a[i + 2]) && !odd(a[i + 3])) {
                // 0 & 1 are odd, 2 & 3 are even
                return true;
            }
        } else if (!odd(a[i + 1]) && odd(a[i + 2]) && odd(a[i + 3])) {
            // 0 & 1 are even, 2 & 3 are odd
            return true;
        }
    }
    return false;
}

public boolean odd(int i){
    return (i & 1) == 1;
}

您也可以使用位測試來做到這一點。 我擴展了布爾結構以使其更易於理解,但如果需要,它們可以全部合並為一個。 請注意,低位決定了數字被 2 整除的能力。

      int[] vals = { 2, 4, 5, 7, 9, 11, 10, 14
      };
      for (int i = 0; i < vals.length - 3; i++) {
         int a = vals[i];
         int b = vals[i + 1];
         int c = vals[i + 2];
         int d = vals[i + 3];
         boolean firstTwoOdd = ((a & b) & 1) == 1;
         boolean firstTwoEven = ((a | b) & 1) == 0;
         boolean secondTwoOdd = ((c & d) & 1) == 1;
         boolean secondTwoEven = ((c | d) & 1) == 0;
         boolean oddeven = firstTwoOdd && secondTwoEven;
         boolean evenodd = firstTwoEven && secondTwoOdd;
         System.out.printf("(%d,%d,%d,%d) : %b%n",
               a,
               b,
               c,
               d,
               oddeven || evenodd);
      }

這是一個可能的解決方案

boolean checker (int[] array) {
            if (array.length <= 3) {
                return false;
            } else {
                for (int i = 0; i < array.length - 3; i++) {
                    if (array[i] % 2 == 0 && array[i + 1] % 2 == 0) {
                        int j = i + 2;
                        if (array[j] % 2 != 0 && array[j + 1] % 2 != 0) {
                            return true;
                        }
                    } else if (array[i] % 2 != 0 && array[i + 1] % 2 != 0) {
                        int j = i + 2;
                        if (array[j] % 2 == 0 && array[j + 1] % 2 == 0) {
                            return true;
                        }
                    }
                }
                return false;
            }

        }
    }

class Dcoder
{  
  public static void main(String args[])
  {  
    int[] arr = {2, 4, 5, 7, 8, 9, 10};
    boolean bool1 = false;
    boolean bool2 = false;
    
    for(int i = 1; i < arr.length; i++){
        
        if(arr[i-1]%2 == 0 && arr[i]%2 == 0){
            bool1 = true;
        }
        else if(arr[i-1]%2 != 0 && arr[i]%2 != 0){
            bool2 = true;
        }
    }
    System.out.println("2Odd + 2Even : " + (bool1 && bool2));
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM