Java 基于条件将常量值分配给不同变量中的一个

Java 基于条件将常量值分配给不同变量中的一个,java,conditional-statements,Java,Conditional Statements,通常在三元操作中,LHSside是常数,RHS是变化的 int marks; String result = (Grade > marks) ? 'PASS' : 'FAIL'; 但是,我想要什么 int marks; if(Grade > marks) passMark = marks; else failedMark = marks; Java中的赋值a=b不会产生任何值,但三元运算符希望从中返回一些值 编辑:我刚刚意识到我不能解决你的问题 请注意,用括号中的

通常在三元操作中,LHSside是常数,RHS是变化的

int marks;
String result = (Grade > marks) ? 'PASS' : 'FAIL';
但是,我想要什么

int marks;
if(Grade > marks)
    passMark = marks;
else
    failedMark = marks;

Java中的赋值a=b不会产生任何值,但三元运算符希望从中返回一些值

编辑:我刚刚意识到我不能解决你的问题

请注意,用括号中的赋值对三元运算符进行黑客攻击就像踢Java的脸一样

解决方案:您不应该在一行中分配多个变量。尽可能多地使用多行代码,一旦代码正常工作并且没有bug,您就可以尝试提高效率


在编程中需要了解的一件非常重要的事情是,找到问题的最小、最复杂的解决方案可能会在以后重新访问时损失很多时间。

Java中的赋值A=b不会产生任何值,但三元运算符希望从中返回一些值

编辑:我刚刚意识到我不能解决你的问题

请注意,用括号中的赋值对三元运算符进行黑客攻击就像踢Java的脸一样

解决方案:您不应该在一行中分配多个变量。尽可能多地使用多行代码,一旦代码正常工作并且没有bug,您就可以尝试提高效率


在编程中需要了解的一件非常重要的事情是,找到问题的最小、最复杂的解决方案可能会导致在将来再次访问时损失大量时间。

从技术上讲,您可以:

marks = (Grade > marks) ? (passMark = marks) : (failedMark = marks);
这将为您提供您想要的,但问题是,
标记
只是被分配了它已经具有的相同值,因为在使用三元运算符时,您不能没有变量分配

这有点让人困惑,所以我不知道我是否能原谅这一点

对于条件运算符:

第二个或第三个操作数表达式调用void方法是编译时错误

这是相关的,因为假设您将
passMark=marks
提取到一个方法:

public static void passMarks(){
   passMark = marks;
}
试着像这样使用它:

(Grade > marks) ? passMarks() : failedMarks();
这将是一个
void
方法,因为您实际上不需要返回任何内容,您的逻辑已经完成。因此,这个条件运算符只起作用,因为我们基本上给它一个伪
返回值
我们不需要它,因为
void
违反了规范

现在,您可以添加一个
返回值
,它的意思是

public static String passMarks(){
   passMark = marks;
   return "PASSED";
}
然后像这样使用它:

String passed = (Grade > marks) ? passMarks() : failedMarks();
它将设置值并返回表示
已通过
失败
字符串
,同时执行多个操作


注意:我假装
passMark
marks
是从方法中可以访问的类变量,不需要传递它,以便于解释。

您可以从技术上做到:

marks = (Grade > marks) ? (passMark = marks) : (failedMark = marks);
这将为您提供您想要的,但问题是,
标记
只是被分配了它已经具有的相同值,因为在使用三元运算符时,您不能没有变量分配

这有点让人困惑,所以我不知道我是否能原谅这一点

对于条件运算符:

第二个或第三个操作数表达式调用void方法是编译时错误

这是相关的,因为假设您将
passMark=marks
提取到一个方法:

public static void passMarks(){
   passMark = marks;
}
试着像这样使用它:

(Grade > marks) ? passMarks() : failedMarks();
这将是一个
void
方法,因为您实际上不需要返回任何内容,您的逻辑已经完成。因此,这个条件运算符只起作用,因为我们基本上给它一个伪
返回值
我们不需要它,因为
void
违反了规范

现在,您可以添加一个
返回值
,它的意思是

public static String passMarks(){
   passMark = marks;
   return "PASSED";
}
然后像这样使用它:

String passed = (Grade > marks) ? passMarks() : failedMarks();
它将设置值并返回表示
已通过
失败
字符串
,同时执行多个操作

注意:我假装
passMark
marks
是从方法中可以访问的类变量,不需要传递它,以便于解释。

您可以这样做(尽管不推荐)

因为三元运算符由一个计算结果为true或false的条件,加上一个条件为true时返回的值和另一个条件为false时返回的值组成。

您可以这样做(尽管不推荐这样做)


因为三元运算符由一个计算结果为true或false的条件,加上一个条件为true时返回的值和另一个条件为false时返回的值组成。

我将在Sonar中尝试此测试,它按预期工作,但显示为2,3个声纳问题,如“分配变量不应在子表达式内”等。我将尝试在声纳中进行测试。它按预期工作,但显示了2、3个声纳问题,如“分配变量不应在子表达式内”等。