非法表达式Java布尔值?

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)

......或者你想要的表达实际上是什么.

  • "所以你需要决定你想要实现什么,并使代码......反映出同样的事情." 幸福的道路就是这样. (11认同)