三元条件运算符中的多个条件?

2022-09-01 18:14:01

我正在学习Java编程的第一个学期,我们刚刚介绍了条件运算符(? :)条件。我有两个问题似乎希望我将条件运算符“嵌套”在彼此之间,我可以很容易地(但乏味地)用if-else-if语句来做到这一点。

1)“假设月份是一个int变量,其值为1或2,3或5......或 11 或 12。根据月份的值,编写一个表达式,其值为“jan”或“feb”或“mar”或“apr”或“may”或“jun”或“jul”或“aug”或“sep”或“oct”或“nov”或“dec”。(因此,如果 month 的值为 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岁或更多将是“大四学生”。

再一次,我一直在玩弄,我能想到的最好的是这样的东西(我可能缺少一些必要的括号):

credits < 30 ? "freshman": credits >= 30 && <=59 ?
 "sophomore": credits >= 60 && <= 89 ? "junior": "senior"

我已经谷歌搜索并检查了这里的数据库,但我不认为有任何东西与这个问题完全相同;如果我错了,请原谅我。该程序(CodeLab)不会采用Switch-Case或if-else-if解决方案,总是建议我应该使用条件?:操作员,但是无论我在哪里看,我都没有弄清楚如何操纵操作员来处理这么多条件。在这本书中,我们还没有超过这一点,所以如果你们能帮我找到一个解决方案,那就太好了,如果它是一个与我迄今为止学到的一点点东西相吻合的解决方案。


答案 1

对于第一个问题,您确实可以使用三元运算符,但更简单的解决方案是使用带有月份描述的,然后为此数组下标:String[]

String[] months = { "jan", "feb", "mar", ... };
int month = 1; // jan
String monthDescription = months[month - 1]; // arrays are 0-indexed

现在,对于您的第二个问题,三元运算符似乎更合适,因为您的条件较少,尽管a更容易阅读,恕我直言:if

String year = "senior";
if (credits < 30) {
  year = "freshman";
} else if (credits <= 59) {
  year = "sophomore";
} else if (credits <= 89) {
  year = "junior";
}

将其与三元运算符对比:

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

答案 2

括号就像暴力:如果它不起作用,那就多用。

但说真的:

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

拜托,永远不要为任何重要的事情写这样的代码。


推荐