20

私はJavaプログラミングの最初の学期を受講しており、条件演算子(?:)条件について説明しました。条件演算子を相互に「ネスト」させたいと思われる2つの質問があります。これは、if-else-ifステートメントを使用して簡単に(ただし退屈に)実行できます。

1)「月が1または2または3または5...または11または12であるint変数であると仮定します。値が「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は、値が0または正のint変数であると想定します。クレジットの値に基づいて、値が「新入生」または「2年生」または「ジュニア」または「シニア」である式を記述します。特に、クレジットの値が30未満の場合、式の値は「新入生」です。30-59は「2年生」、60-89は「ジュニア」、90以上は「シニア」になります。

繰り返しになりますが、私はいじくり回していて、私が思いつくことができる最高のものは次のようなものです(そして私はいくつかの必要な括弧が欠けている可能性があります):

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

私はグーグルでデータベースをチェックしましたが、この質問とまったく同じものがあるとは思いません。私が間違っていたら許してください。プログラム(CodeLab)は、Switch-Caseまたはif-else-ifソリューションを使用せず、常に条件付き?を使用する必要があることを示唆しています。:オペレーターですが、どこを見ても、オペレーターをリグして非常に多くの条件を処理する方法がわかりません。私たちは本の中でこれをはるかに超えていないので、皆さんが私が解決策を見つけるのを手伝ってくれるなら、それが私がこれまでに学んだ少しでジャイブするものであれば素晴らしいでしょう。

4

7 に答える 7

40

最初の質問では、実際に三項演算子を使用できますが、より簡単な解決策は、月の説明でaを使用しString[]から、この配列に添え字を付けることです。

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

さて、2番目の質問では、条件が少ないので三項演算子の方が適切だと思われますが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";
于 2012-09-23T00:54:22.247 に答える
10

括弧は暴力のようなものです。それが機能しない場合は、もっと使用してください。

しかし真剣に:

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

そして、重要なことのためにそのようなコードを書かないでください。

于 2012-09-23T00:50:37.523 に答える
4

(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

あなたはそれを正しく理解しました、あなたが必要とする唯一のものはあなたがそれをすべて終えたときの最後のヌルです。

于 2012-10-22T13:36:16.460 に答える
3

私の研究でも同じ質問がありました。ifとについての情報をありがとうelse。割り当てが条件演算子を使用するように具体的に要求していることを除いて、私の選択でもあります。だから基本的に彼らは私たちにそれを読めない方法で書くように頼んでいます。

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

これは私のものであり、正しいものでした。(条件演算子のみを使用して)より短いコードがあるかどうか疑問に思っています。

ちなみに、Evanのコードはほとんど良かったです。各式を囲む角かっこをいくつか見逃しました。

于 2012-11-06T22:14:28.823 に答える
0

三元でif-else-ifの状況のアイデアを正しく処理していますが、構文が少しずれていました(あなたが言ったように)。

ただし、余分な条件が不必要にチェックされないように、少し変更します。

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

ただし、コードを読みやすくするために、ifステートメントとelseステートメントを使用するのが最善のオプションです。

于 2012-09-23T00:51:58.873 に答える
0

コードを角かっこで囲み、最後にnullを追加すると、黄金色になります。

于 2016-09-24T02:56:16.190 に答える
0

-私の場合、そのタグにロードバーを実装する必要があるフラグに基づいて「isloadingMakePayment」フラグがあります。つまり、isloadingMakePaymentがtrueの場合、タグは「LoadingData...」を表示します。複数の条件を実装しました。

- 「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>


ありがとうございました。

于 2020-03-14T12:25:13.433 に答える