Java 对使用逻辑运算符感到困惑吗
我有一个任务/项目要写一个程序,显示1到100之间的整数,这些整数可以被6或7整除,但不能同时被2整除。它不像我在下面写的那样工作。我的布尔值对问题的要求正确吗Java 对使用逻辑运算符感到困惑吗,java,Java,我有一个任务/项目要写一个程序,显示1到100之间的整数,这些整数可以被6或7整除,但不能同时被2整除。它不像我在下面写的那样工作。我的布尔值对问题的要求正确吗 import acm program.*; public class SixAndSeven extends ConsoleProgram { public void run() { for (int n = 1; n < 100; n++) { boolean year = (n
import acm program.*;
public class SixAndSeven extends ConsoleProgram {
public void run() {
for (int n = 1; n < 100; n++) {
boolean year = (n % 6 ==0) ||
(n % 7 ==0) &&
!(n % 6 == 0) &&
( n % 7 ==0);
if (year) {
println(year);
}
}
}
}
你应该做下面的事情
boolean year = ((n % 6 ==0) || (n % 7 ==0)) && !((n % 6 == 0) && ( n % 7 ==0));
基本上,在求反之前,将a中的两组条件分组,以便条件正确地应用于这两个条件
为了让它更具可读性,您可以这样做。。虽然可能有点过分了
boolean divisbleby6 = n%6 == 0;
boolean divisbleby7 = n%7 == 0;
boolean divisibleby6and7 = divisbleby6 && divisbleby7 ;
boolean year = (divisbleby6 || divisbleby7) && !divisibleby6and7 ;
或者梅尔建议的聪明方法可能更难一目了然地理解,它只在一个条件为真,而不是两个条件都为真时才返回真
boolean year = divisbleby6 != divisbleby7;
另外,正如用户1333371所建议的,您可能希望使用printlnn 您应该执行以下操作
boolean year = ((n % 6 ==0) || (n % 7 ==0)) && !((n % 6 == 0) && ( n % 7 ==0));
基本上,在求反之前,将a中的两组条件分组,以便条件正确地应用于这两个条件
为了让它更具可读性,您可以这样做。。虽然可能有点过分了
boolean divisbleby6 = n%6 == 0;
boolean divisbleby7 = n%7 == 0;
boolean divisibleby6and7 = divisbleby6 && divisbleby7 ;
boolean year = (divisbleby6 || divisbleby7) && !divisibleby6and7 ;
或者梅尔建议的聪明方法可能更难一目了然地理解,它只在一个条件为真,而不是两个条件都为真时才返回真
boolean year = divisbleby6 != divisbleby7;
另外,正如用户1333371所建议的,您可能希望使用printlnn 使用括号设置运算顺序,并确保求反运算适用于6和7的模检查
import acm program.*;
public class SixAndSeven extends ConsoleProgram {
public void run(){
for (int n = 1; n < 100; n++) {
boolean year = ((n % 6 == 0) || (n % 7 == 0))
&& !((n % 6 == 0) && (n % 7 == 0));
if (year) {
System.out.println(n);
}
}
使用括号设置运算顺序,并确保求反运算同时适用于6和7的模检查
import acm program.*;
public class SixAndSeven extends ConsoleProgram {
public void run(){
for (int n = 1; n < 100; n++) {
boolean year = ((n % 6 == 0) || (n % 7 == 0))
&& !((n % 6 == 0) && (n % 7 == 0));
if (year) {
System.out.println(n);
}
}
你可以简单地写如下:
boolean year = (n % 6 == 0) != (n % 7 == 0)
你可以简单地写如下:
boolean year = (n % 6 == 0) != (n % 7 == 0)
如果它不起作用,那么不,它不正确;为了更有帮助,您应该编辑您的程序,以显示未给出正确答案的值的每个布尔项的值。我认为您应该打印n而不是布尔年。你也可能想把下半场改成!n%6==0&&n%7==0@user1333371是的,谢谢,那是一个打字错误如果它不起作用,那么不,它是不正确的;为了更有帮助,您应该编辑您的程序,以显示未给出正确答案的值的每个布尔项的值。我认为您应该打印n而不是布尔年。你也可能想把下半场改成!n%6==0&&n%7==0@user1333371是的,谢谢。那是个打字错误。我没有注意到,谢谢。考虑使用布尔MOD6= N% 6==0;mod7=mod7%==0;所以你不需要重做工作。它还允许您返回mod6!=mod7很可爱。我真的不建议使用布尔x=divisibleby6!=可除以7;我花了很长时间才弄明白那是怎么回事。这是一个非常聪明的代码,我不是说这是一种恭维。@DanielKaplan true添加了警告。我没有注意到,谢谢。+1。考虑使用布尔MOD6= N% 6==0;mod7=mod7%==0;所以你不需要重做工作。它还允许您返回mod6!=mod7很可爱。我真的不建议使用布尔x=divisibleby6!=可除以7;我花了很长时间才弄明白那是怎么回事。这是一个非常聪明的代码,我不是说这是一种恭维。@DanielKaplan true添加了警告。或者使用XOR而不是not equals。最佳答案。或者使用XOR而不是not equals。最佳答案。