[英]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.