Tan*_*nks 11 java if-statement boolean bitwise-operators
我正在尝试运行按位数比较,并且我的代码在我的代码的第30行上使用"if"语句不断出现非法表达式.
我的代码如下:
public class Project7 {
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
double P = keyboard.nextDouble();
double Q = keyboard.nextDouble();
double R = keyboard.nextDouble();
double S = keyboard.nextDouble();
boolean First_Relation;
boolean Second_Relation;
if (P > Q) First_Relation = true;
if (R < S) Second_Relation = true;
if (First_Relation = true) & (Second_Relation = true);
System.out.println("Given the values for p,q,r, and s the expression "
+ "(p > q) && !(r < s) evaluates to " );
}
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 104
一个if声明的形式为:
if (condition) statement
Run Code Online (Sandbox Code Playgroud)
您目前有两个括号内的条件......最终也会分配值,这可能不是您想要的.
所以首先修复它来编译:
if ((First_Relation = true) & (Second_Relation = true))
Run Code Online (Sandbox Code Playgroud)
然后将赋值更改为相等检查,否则它将简单地分配true给两个变量,并且无论先前的值如何,条件都将通过:
if ((First_Relation == true) & (Second_Relation == true))
Run Code Online (Sandbox Code Playgroud)
然后删除与布尔常量的比较:
if ((First_Relation) & (Second_Relation))
Run Code Online (Sandbox Code Playgroud)
然后删除不必要的括号
if (First_Relation & Second_Relation)
Run Code Online (Sandbox Code Playgroud)
然后使变量遵循Java命名约定:
if (firstRelation & secondRelation)
Run Code Online (Sandbox Code Playgroud)
然后使用更常规&&而不是&- &&短路,几乎总是你想要的:
if (firstRelation && secondRelation)
Run Code Online (Sandbox Code Playgroud)
现在你的if条件之后你仍然会直接得到一个分号,这使得它毫无意义 - 它将始终执行System.out.println语句,因为这不是if语句的一部分.您可以删除分号,但为了清晰起见,我会添加括号:
if (firstRelation && secondRelation) {
System.out.println("insert text here");
}
Run Code Online (Sandbox Code Playgroud)
接下来,请注意,如果条件为真,您实际上只是初始化变量 - 因此,您当前会因尝试读取未明确赋值的变量而遇到编译时错误.
首先,修正明确的任务:
// Names changed to follow conventions
boolean firstRelation = p > q;
boolean secondRelation = r < s;
Run Code Online (Sandbox Code Playgroud)
......而且上面的代码应该没问题.
接下来,发现你确实从那些额外的变量中获得的确很少.改为内联条件:
if (p > q && r < s) {
System.out.println("Given the values for p,q,r, and s the expression "
+ "(p > q) && !(r < s) evaluates to ";
}
Run Code Online (Sandbox Code Playgroud)
在这一点上,很明显还有一个错误 - 因为你的消息谈论!(r < s)但条件是公正的r < s.所以你需要决定你想要实现什么,并使代码和消息反映出同样的事情.请注意,您也没有完成消息.实际上,您可以将整个过程简化为:
System.out.println("Given the values for p,q,r, and s the expression "
+ "(p > q) && !(r < s) evaluates to " + ((p > q) && !(r < s));
Run Code Online (Sandbox Code Playgroud)
......或者你想要的表达实际上是什么.
| 归档时间: |
|
| 查看次数: |
11148 次 |
| 最近记录: |