Java 基于条件将常量值分配给不同变量中的一个
通常在三元操作中,LHSside是常数,RHS是变化的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不会产生任何值,但三元运算符希望从中返回一些值 编辑:我刚刚意识到我不能解决你的问题 请注意,用括号中的
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个声纳问题,如“分配变量不应在子表达式内”等。