对布尔结果的误解

问题描述 投票:2回答:1

有人可以帮我一下吗?我很难理解为什么布尔在这里不能按我想要的方式工作。这个想法是当i(firstnum)为奇数,l(lastnum)为相等,反之亦然。关于如何使用布尔值的一些帮助也会有所帮助,我无法理解。

输入3和5。

预期输出:4333 4353 4443 4533 4553 5334 5354 5444 5534 5554

实际输出:4333 4353 4443 4533 4553 5333 5334 5353 5354 5443 5444 5533 5534 5553 5554

int startNum = Integer.parseInt(scan.nextLine());
int endNum = Integer.parseInt(scan.nextLine());

boolean isItEqual = false;
boolean isItOdd= false;

int countDebugOperations = 0;
for (int i = startNum; i <=endNum ; i++) {

    if (i % 2==0){
        isItEqual =true;
    }
    for (int j = startNum; j <=endNum ; j++) {
        for (int k = startNum; k <=endNum ; k++) {
            for (int l = startNum; l <=endNum ; l++) {
                if (l % 2 == 1){
                    isItOdd = true;
                }
                boolean flag =(i > l) && (j+k) % 2 ==0;

                if(!isItEqual && (!isItOdd) && flag){

                        countDebugOperations+=1;
                        System.out.printf("%d%d%d%d ",i,j,k,l);

                }
                if (isItEqual && isItOdd && flag) {
                    countDebugOperations += 1;
                    System.out.printf("%d%d%d%d ", i, j, k, l);

                }
java boolean boolean-logic boolean-expression boolean-operations
1个回答
3
投票

您正试图在两种情况下打印数字ijkl

  1. [i为偶数AND l为奇数时
  2. [l为偶数AND i为奇数时

如果将这些情况转换为代码(布尔表达式),则会得到:

  1. i % 2 == 0 && l % 2 == 1
  2. l % 2 == 0 && i % 2 == 1

现在,当我们遍历for循环时,我们可以询问我们的“数字状态”是否匹配这2种情况之一(第一种情况OR第二种情况)。

int startNum = Integer.parseInt(scan.nextLine());
int endNum = Integer.parseInt(scan.nextLine());

for (int i = startNum; i <= endNum; i++) {
    for (int j = startNum; j <= endNum; j++) {
        for (int k = startNum; k <= endNum; k++) {
            for (int l = startNum; l <= endNum; l++) {

                boolean firstCase = i % 2 == 0 && l % 2 == 1;
                boolean secondCase = l % 2 == 0 && i % 2 == 1;

                // now when we print, we can ask if we are in the first OR the second case
                if (firstCase || secondCase) {
                    System.out.printf("%d%d%d%d ",i,j,k,l);
                }
            }
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.