我正在尝试运行按位数字比较,并且我的代码在我的代码的第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 " );
}
}
答案 0 :(得分:104)
if
语句的格式为:
if (condition) statement
您目前已经两个括号内的条件......最终分配了值,这可能不是您想要的。
首先修复它以进行编译:
if ((First_Relation = true) & (Second_Relation = true))
然后将赋值更改为等式检查,否则它只会将true
分配给两个变量,无论以前的值如何,条件都会通过:
if ((First_Relation == true) & (Second_Relation == true))
然后删除与布尔常量的比较:
if ((First_Relation) & (Second_Relation))
然后删除不必要的括号:
if (First_Relation & Second_Relation)
然后使变量遵循Java命名约定:
if (firstRelation & secondRelation)
然后使用更传统的&&
代替&
- &&
是短路的,几乎总是你想要的:
if (firstRelation && secondRelation)
现在你的if
条件之后你仍然会直接得到一个分号,这使得它毫无意义 - 它将总是执行System.out.println
语句,因为这不是if
声明的一部分。您可以只删除分号,但为了清晰起见,我添加了大括号:
if (firstRelation && secondRelation) {
System.out.println("insert text here");
}
接下来,请注意,如果条件为真,您实际上只是初始化变量 - 因此您当前会因尝试读取未明确分配的变量而遇到编译时错误。
首先,确定明确的任务:
// Names changed to follow conventions
boolean firstRelation = p > q;
boolean secondRelation = r < s;
......上面的代码应该没问题。
接下来,发现你确实从那些额外的变量中获得的确非常少。改为内联条件:
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 ";
}
此时,很明显还有一个错误 - 因为您的消息是!(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));
......或者你想要表达式实际上是什么。
答案 1 :(得分:4)
据我所知,您不能使用Java中的&
运算符来执行双精度之间的按位比较。它只能与其他更简单的原语一起使用,如整数和字符。
此外,您使用&
运算符的方式不会在数字之间执行按位比较,因为您使用它来比较P>Q
和R<S
的结果,两者都产生布尔值。
要在双打之间执行按位比较,您需要使用不同的技术直接将P与Q和R与S进行比较。以下是一种方法示例:https://stackoverflow.com/a/13928322/213343。
答案 2 :(得分:2)
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 " );
}
并且有效方式是
if (First_Relation && Second_Relation)
{
System.out.println("Given the values for p,q,r, and s the expression "
+ "(p > q) && !(r < s) evaluates to " );
}
答案 3 :(得分:1)
尝试
(First_Relation = true) & (Second_Relation = true)
括号内。 并删除“;”从“if”语句结束,导致它没有意义:“;”被认为是一个新的语句终止(在你的情况下为空语句),因为你没有提供“if”语句的范围 - 它只适用于下一个statemnt,即空语句。
答案 4 :(得分:1)
如果不满足条件,则没有消息。因此,我建议:
boolean evaluation = (P > Q) && !(R < S);
System.out.println("Given the values for p,q,r, and s the expression "
+ "(p > q) && !(r < s) evaluates to " + evaluation);