5 回答
TA贡献1810条经验 获得超5个赞
问题是您break;
只退出内部循环。即使在找到匹配项后,您仍会继续外循环,该循环将bool
在下一次迭代中设置为 false。
无需太多更改,您只需添加
if(bool){ break; }
一旦找到匹配项,就在外循环的末尾离开它。
TA贡献1757条经验 获得超7个赞
这是一个可能的解决方案
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;
}
}
}
TA贡献1878条经验 获得超4个赞
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));
}
}
TA贡献1829条经验 获得超7个赞
您也可以使用位测试来完成。我扩展了布尔结构以使其更容易理解,但如果需要,它们可以全部组合成一个。请注意,低位决定了数字能否被 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);
}
TA贡献1891条经验 获得超3个赞
您的代码比需要的要复杂一些;尝试使您的程序尽可能简单。在开始编写代码之前,请仔细考虑实现目标所需的步骤并将它们列出来。在这种情况下,您只需要检查数组中每组 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;
}
添加回答
举报