为了账号安全,请及时绑定邮箱和手机立即绑定

两个偶数和两个奇数彼此相邻出现

两个偶数和两个奇数彼此相邻出现

qq_笑_17 2023-06-14 13:55:35
给定一个整数数组,如果两个偶数和两个奇数在数组中彼此相邻出现,则打印 true我试图使用“布尔值”来解决这个问题,但没有得到预期的结果。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
查看完整描述

5 回答

?
森栏

TA贡献1810条经验 获得超5个赞

问题是您break;只退出内部循环。即使在找到匹配项后,您仍会继续外循环,该循环将bool在下一次迭代中设置为 false。
无需太多更改,您只需添加

if(bool){
    break;
}

一旦找到匹配项,就在外循环的末尾离开它。


查看完整回答
反对 回复 2023-06-14
?
长风秋雁

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;

            }


        }

    }


查看完整回答
反对 回复 2023-06-14
?
UYOU

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));

  }

}


查看完整回答
反对 回复 2023-06-14
?
吃鸡游戏

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);

      }


查看完整回答
反对 回复 2023-06-14
?
万千封印

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;

}


查看完整回答
反对 回复 2023-06-14
  • 5 回答
  • 0 关注
  • 184 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信