【问题标题】:misunderstanding of Boolean result对布尔结果的误解
【发布时间】:2020-03-22 07:48:59
【问题描述】:

有人可以帮帮我吗?我很难理解为什么这里的布尔值不能按我想要的方式工作。这个想法是当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);

                }

【问题讨论】:

  • 您能否在问题中添加:输入、实际输出和预期输出? 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
  • 如果第一个数字是奇数,最后一个数字必须是偶数,如果最后一个数字是奇数,第一个数字必须是偶数:(提前谢谢!

标签: java boolean boolean-logic boolean-expression boolean-operations


【解决方案1】:

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

  1. i 是偶数时AND l 是奇数
  2. l 是偶数时AND i 是奇数

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

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

现在,当我们遍历for 循环时,我们可以询问我们的“数字状态”是否匹配这两种情况之一(第一种情况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);
                }
            }
        }
    }
}

【讨论】:

    猜你喜欢
    • 2023-03-15
    • 1970-01-01
    • 2015-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多