和/或 java

And / or in java

我的 java 练习有问题 问题是说 当偶数之和>=50或奇数之和>=49时程序结束。

所以在解决它时我尝试使用

while (sumeven < 50 || sumodd < 49 )

它根本不起作用,但当我检查他们使用的解决方案时

while (evensum <= 50 && oddsum<=49)

它起作用了(给出了与示例相同的答案 运行)

所以我的问题是我误解了吗?或者问题给出了某种错误。谢谢你的时间

更新:

代码:

package sample2;
import java.util.Scanner;

public class Sample2 {

    public static void main(String[] args) {
        Scanner scan=new Scanner(System.in);

        System.out.println("enter the initial value");
        int sumeven=0;
        int sumodd=0;
        int num;
        int initial;
        int div5and2=0;
        initial=scan.nextInt();
        if (initial<=0)
            System.out.println("the number must be strictly positive");
        else{
            if (initial%2==0)
                sumeven=initial;
            else
                sumodd=initial;

            System.out.println("start entering your numbers");
            num=scan.nextInt();
            if (num<=0)
                System.out.println("the number must be strictly positive");
            else{
                while(sumeven<=50||sumodd<=49 )
                {
                    if (num%2==0)
                        sumeven=sumeven+num;
                    else 
                        sumodd=sumodd+num;
                    if (num%5==0 &&num%2==0)
                        div5and2=div5and2+1;

                    num=scan.nextInt();
                    while(num<=0)
                    {
                        System.out.println("the number must be strictly positive");
                        num=scan.nextInt();
                    }
                }

                System.out.println("the sum of even numbers: "+sumeven);
                System.out.println("the sum of odd numbers: "+sumodd);
                System.out.println("the number of integers divided by 2 and 5: "+div5and2);
            }
        }
    }
}

while(sumeven<50||sumodd<49 )表示程序会在sumeven<50sumodd<49时运行,也就是在sumeven>=50 sumodd>=49.

这是基本的布尔代数。

or的'opposite'是and,所以如果你想停止

"even >= 50 or odd >= 49"

你必须继续对面,也就是

"even < 50 and odd < 49".

当你否定一个语句时,>= 变成 < 而 <= 变成 >。同样,AND 变为 OR,OR 变为 AND。在这里,你的停止条件是 even >= 50 OR odd >= 49,这个的否定(这是继续所需要的)是 even<50 AND odd<49.

您希望程序在“偶数之和 >= 50 或奇数之和 >= 49”时结束。

所以,需要类似的东西(伪代码):

while (Not( the sum of even is >= 50 or the sum of odd is >= 49))

De Morgan's laws 告诉我们我们需要 not 每个部分去掉括号并在 andor 之间切换:

while (Not( the sum of even is >= 50) and Not( or the sum of odd is >= 49))

让我们尝试一些例子。 如果偶数和为 50,奇数和为 40,则您想停止。 如果你勾选

while (sumeven < 50 || sumodd < 49 )

您将继续前进,因为 sumeven < 50 是错误的,但 sumodd < 49 是正确的。

检查两个部分:

while (evensum <= 50 && oddsum<=49)

有效。

while(sumeven<50||sumodd<49)

在这种情况下,如果 sumeven<50 OR sumodd<49,程序不会结束。即程序会在sumeven>=50 AND sumodd>=50.

时结束

布尔逻辑 101:

!(A || B) == !A && !B 注意 &&.

本质上,如果您正在查看 A 或 B 的状态,并且想要对其表示赞赏,您必须将其编码为 而不是 A 或B 显然 既不是 A 也不是 B 或者 不是 A 并且 不是 B

A​​IM - 当偶数之和 >= 50 或奇数之和 >= 49 时,程序将结束。

因此,while (sumeven < 50 || sumodd < 49 ) 将不起作用,因为当偶数之和 < 50 或奇数之和 < 49 时程序将结束,这不是预期的行为。

因此,我们必须循环直到

  1. 偶数之和小于等于50
  2. 奇数之和小于等于49

仅当所有条件都为真时,整个条件集才为真,因此我们对 2 个条件使用 && 运算符。