和/或 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<50
或sumodd<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
每个部分去掉括号并在 and
和 or
之间切换:
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。
AIM - 当偶数之和 >= 50 或奇数之和 >= 49 时,程序将结束。
因此,while (sumeven < 50 || sumodd < 49 )
将不起作用,因为当偶数之和 < 50 或奇数之和 < 49 时程序将结束,这不是预期的行为。
因此,我们必须循环直到
- 偶数之和小于等于50
- 奇数之和小于等于49
仅当所有条件都为真时,整个条件集才为真,因此我们对 2 个条件使用 &&
运算符。
我的 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<50
或sumodd<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
每个部分去掉括号并在 and
和 or
之间切换:
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。
AIM - 当偶数之和 >= 50 或奇数之和 >= 49 时,程序将结束。
因此,while (sumeven < 50 || sumodd < 49 )
将不起作用,因为当偶数之和 < 50 或奇数之和 < 49 时程序将结束,这不是预期的行为。
因此,我们必须循环直到
- 偶数之和小于等于50
- 奇数之和小于等于49
仅当所有条件都为真时,整个条件集才为真,因此我们对 2 个条件使用 &&
运算符。