Java 三元条件算子中的多重条件?

Java 三元条件算子中的多重条件?,java,conditional,operator-keyword,Java,Conditional,Operator Keyword,我正在学习Java编程的第一学期,我们刚刚讨论了条件运算符(?:)条件。我有两个问题似乎想让我在彼此之间“嵌套”条件运算符,我可以用if-else-if语句轻松地(但很乏味地)做这件事 1) 假设月份是一个整数变量,其值为1或2或3或5…或11或12。根据月份的值,写出一个值为“jan”或“feb”或“mar”或“apr”或“may”或“jun”或“jul”或“aug”或“sep”或“oct”或“nov”或“dec”的表达式。(因此,如果月份的值为4,则表达式的值为“apr”。) 我的想法是这样

我正在学习Java编程的第一学期,我们刚刚讨论了条件运算符(?:)条件。我有两个问题似乎想让我在彼此之间“嵌套”条件运算符,我可以用if-else-if语句轻松地(但很乏味地)做这件事

1) 假设月份是一个整数变量,其值为1或2或3或5…或11或12。根据月份的值,写出一个值为“jan”或“feb”或“mar”或“apr”或“may”或“jun”或“jul”或“aug”或“sep”或“oct”或“nov”或“dec”的表达式。(因此,如果月份的值为4,则表达式的值为“apr”。)

我的想法是这样的:

(month==1)?"jan":(month==2)?"feb": (month==3)?"mar": (month==4)?"apr": 
(month==5)?"may":(month==6)?"jun": (month==7)?"jul":(month==8)?"aug":
(month==9)?"sep": (month==10)?"oct": (month==11)?"nov": (month==12)?"dec":
(我知道这不是一个完整的表达式,但我不知道如何使用运算符来处理这么多条件。)

2) 假设credits是一个int变量,其值为0或正。根据学分值写出一个值为“大一”或“大二”或“大三”或“大四”的表达式。特别是:如果学分值小于30,则表达式的值为“新生”;30-59岁为“大二”,60-89岁为“初级”,90岁或以上为“高级”

再一次,我一直在胡闹,我能想出的最好办法是(我可能遗漏了一些必要的括号):


学分<30?“新生”:学分>=30&&=60&&括号就像暴力:如果它不起作用,就多用一些

但严肃地说:

( condition A ? value A :
  ( condition B ? value B : 
    ( condition C ? value C :
       ...
    )
  )
)

请不要为任何重要的事情编写这样的代码。

您正确地处理了三元结构中的if-else-if情况,但您的语法有点不正确(正如您所说的)

不过,我会稍微更改它,这样就不会不必要地检查额外的条件

String year = credits < 30 ? "freshman": credits <= 59
       ? "sophomore": credits <= 89 ? "junior" : "senior";

String year=学分<30?“freshman”:credits对于第一个问题,您确实可以使用三元运算符,但更简单的解决方案是使用带有月份描述的
字符串[]
,然后在该数组下标:

String[] months = { "jan", "feb", "mar", ... };
int month = 1; // jan
String monthDescription = months[month - 1]; // arrays are 0-indexed
现在,对于您的第二个问题,三元运算符似乎更合适,因为您的条件较少,尽管
if
更容易阅读,imho:

String year = "senior";
if (credits < 30) {
  year = "freshman";
} else if (credits <= 59) {
  year = "sophomore";
} else if (credits <= 89) {
  year = "junior";
}
String year=“高级”;
如果(学分<30){
年份=“新生”;
}否则,如果(学分
(月份==1)?“一月”:(月份==2)?“二月”:(月份==3)?“三月”:(月份==4)?“四月”:
(月==5)?“五月”:(月==6)?“六月”:(月==7)?“七月”:(月==8)?“八月”:
(月==9)?“九月”:(月==10)?“十月”:(月==11)?“十一月”:(月==12)?“十二月”:空


你说得对,你唯一需要的就是结束时的空值。我在研究中也遇到了同样的问题。谢谢你提供了关于if
和else
的信息。这也是我的选择,只是作业要求我们具体使用条件运算符。所以基本上他们要求我们编写它以不可读的方式

(credits < 30) ? "freshman" : (credits >= 30 && credits < 60) ?"sophomore" : (credits >= 60 && credits < 90) ? "junior" : "senior"
(学分<30)?“大一”:(学分>=30和<60)?“大二”:(学分>=60和<90)?“大三”:“大四”
这是我的,也是正确的。我想知道是否有一段较短的代码(只使用条件运算符)


顺便说一句,Evan,你的代码几乎很好。只是缺少了每个表达式周围的一些括号。

将代码放在括号中,并在末尾添加null,你就是金色的。

-在我的例子中,我有一个isloadingMakePayment标记基于标记,我必须在该标记上实现加载条。这意味着当isloadingMakePayment为true时,标记将显示“加载数据…”。实现了多个条件

-“isPolicyRename”也是我用于内部条件的标志。同时“renamePolicy”是变量,其中包含一些我用于在HTML页面上显示的值

  • 只需使用此模式:
正在加载数据…{{isloadingMakePayment?'':isPolicyRename'付款至'+renamePolicy:'付款'}}



谢谢。

考虑一下,如果
学分
不是<30,那么它总是>=30,所以这个条件是没有意义的。但是,知道运算符的优先级和求值顺序是一件好事。:)我同意,如果这不是一个在线作业问题,我可能可以更容易地回答它。我使用了括号,它们似乎有帮助。谢谢,我同意第二个问题,if更容易阅读。三元运算符选项是正确的,但我在第一个选项上仍然有问题。我对如何使用三元运算符感到困惑;我可以使用月份==1。。。?再一次,我所拥有的是月份==1?“一月”:月=2?“二月”:月份==3?“三月”:月=4?“apr”:月份==5?“五月”:月=6?“六月”:月=7?“七月”:月份==8?“八月”:月份==9?“九月”:月=10?“十月”:月份==11?“11月”:月=12?“dec”我不理解数组的解释,我们还没有讨论过这些。@EvanWelser:你可以,是的,这是正确的。您的最后一个条件可以简化为
month==11?“十一月”:“十二月”
。无需明确测试
month==12
。谢谢。看看你对2的回答,这就是我最后尝试的。它实际上不接受特定条件“月==12”,它必须是月==11?“11月”:“12月”,但我不确定为什么12个具体条件没有被项目接受。谢谢你的帮助@埃文韦瑟:不客气!这是因为如果你有
“nov”:month==12?“dec”
,您缺少上一个三元条件的第三部分,即月份大于12的情况。您必须添加例如
“nov”:month==12?“十二月”:“无效月份”
String year = credits < 30 ? "freshman" : credits <= 59 ? "sophomore" : credits <= 89 ? "junior" : "senior";
(credits < 30) ? "freshman" : (credits >= 30 && credits < 60) ?"sophomore" : (credits >= 60 && credits < 90) ? "junior" : "senior"