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

时间:2012-09-23 00:46:34

标签: java conditional operator-keyword

我正在学习Java编程的第一个学期,我们刚刚介绍了条件运算符(?:)条件。我有两个问题似乎想让我去#34;筑巢"彼此之间的条件运算符,我可以轻松(但又乏味地)使用if-else-if语句。

1)"假设month是一个int变量,其值为1或2或3或5 ...或11或12.写一个值为" jan"或" feb"或" mar"或" apr"或者"可能"或" 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)假设信用是一个int变量,其值为0或正数。写一个值为"新生"或者"大二"或"初中"或者"高级"基于学分的价值。特别是:如果信用值小于30,则表达式的值为" freshman&#34 ;; 30-59将是"大二",60-89将是" junior" 90岁或以上的人将成为"高级"。

再一次,我一直在玩弄,我能想到的最好的东西就像是(并且我的probs错过了一些必要的括号):

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

我已经在Google上搜索并检查了数据库,但我并不认为有任何与此问题完全相同的内容。如果我错了,请原谅我。程序(CodeLab)不会采用Switch-Case或if-else-if解决方案,总是建议我应该使用条件? :运营商,但在我看到的任何地方我都没有想出如何操作操作员来处理这么多条件。我们在书中并没有超出这个范围,所以如果你们能帮助我找到解决方案的话,那么如果它能够帮我找到解决方案的话,那就很棒了。至今。

7 个答案:

答案 0 :(得分:16)

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

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 = credits < 30 ? "freshman" : credits <= 59 ? "sophomore" : credits <= 89 ? "junior" : "senior";

答案 1 :(得分:7)

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

但严肃地说:

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

并且,请不要为任何重要的事情编写类似的代码。

答案 2 :(得分:2)

(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":null

你做对了,你唯一需要的是当你完成所有这些时最后的空。

答案 3 :(得分:2)

我的研究中有同样的问题。感谢您提供有关ifelse的信息。除了作业特别要求我们使用条件运算符之外,我也会选择。所以基本上他们要求我们以难以理解的方式写它。

(credits < 30) ? "freshman" : (credits >= 30 && credits < 60) ?"sophomore" : (credits >= 60 && credits < 90) ? "junior" : "senior"

这是我的,也是正确的。我想知道是否有一段较短的代码(仅使用条件运算符。)。

顺便说一下Evan,你的代码几乎是好的。只是错过了每个表达式的一些括号。

答案 4 :(得分:0)

您正在正确处理三元组中if-else-if情况的想法,但您的语法略有偏差(正如您所说的那样)。

但是,我会略微改变它,以免不必要地检查额外的条件。

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

但是你最好的选择只是为了代码可读性而使用if和else语句。

答案 5 :(得分:0)

将代码放在括号中,最后添加null,你就是金色。

答案 6 :(得分:0)

-在我的情况下,我有一个“ isloadingMakePayment” 标志,该标志必须在该标签上实现 Loading bar 。这意味着 isloadingMakePayment 是真正的标签,显示为“正在加载数据...” 。实现了多个条件。

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

  • 只需使用以下模式:

<a class="btn btn-orange" (click)="onMakePayment()"> <span *ngIf="isloadingMakePayment"><i class='fa fa-spinner fa-spin'></i>Loading Data...</span>{{isloadingMakePayment ? '' : isPolicyRename 'Make Payment to ' + renamePolicy : 'Make Payment' }} </a>


谢谢。