Evan Welser
Evan Welser

Reputation: 293

Multiple conditions in ternary conditional operator?

I am taking my first semester of Java programming, and we've just covered the conditional operator (? :) conditions. I have two questions which seem to be wanting me to "nest" conditional operators within eachother, something that I could easily (yet tediously) do with if-else-if statements.

1) "Assume that month is an int variable whose value is 1 or 2 or 3 or 5 ... or 11 or 12. Write an expression whose value is "jan" or "feb" or "mar" or "apr" or "may" or "jun" or "jul" or "aug" or "sep" or "oct" or "nov" or "dec" based on the value of month. (So, if the value of month were 4 then the value of the expression would be "apr".)."

an idea I had looks something like this:

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

(I know this isn't a complete expression, but I'm not sure how to phrase the operator to handle so many conditions.)

2) Assume that credits is an int variable whose value is 0 or positive. Write an expression whose value is "freshman" or "sophomore" or "junior" or "senior" based on the value of credits. In particular: if the value of credits is less than 30 the expression's value is "freshman"; 30-59 would be a "sophomore", 60-89 would be "junior" and 90 or more would be a "senior".

again, I've been toying around and the best I can come up with is something like(and I'm probs missing some necessary parentheses):

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

I've Googled around and checked the database here, but I don't THINK that there's anything exactly like this question; forgive me if I'm wrong. The program (CodeLab) won't take Switch-Case or the if-else-if solution, always suggesting I should be using the conditional ? : operator, but everywhere I've looked I haven't figured out how to rig the operator to handle so many conditions. We aren't far past this in the book, so if you guys could help me find a solution, it'd be great if it's one that jives with the little bit I've learned so far.

Upvotes: 29

Views: 225373

Answers (7)

Ronak Patel
Ronak Patel

Reputation: 33

-In my case, I have an "isloadingMakePayment" flag based on the flag I have to implement Loading bar over That Tag.It means when isloadingMakePayment is true tag show "Loading Data..." instead. Implemented multiple conditions.

-An "isPolicyRename" is also a flag that I used for inside condition.MeanWhile "renamePolicy" is variable which contain some value that I use to show over HTML page

  • Simply use this pattern :

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


Thank you.

Upvotes: 1

Owen Delisle
Owen Delisle

Reputation: 21

Put your code in brackets and add null at the end and you're golden.

Upvotes: 2

Jurgen Ermans
Jurgen Ermans

Reputation: 41

I had the same question at my study. Thanks for the info about if and else. Would be my choice too except the assignment is asking us specificly to use the conditional operators. so basically they're asking us to write it in an unreadable way.

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

This was mine and its correct. I am wondering though if there is a shorter piece of code (using only the conditional operators.).

By the way Evan your code was almost good. just missed some brackets around each expression.

Upvotes: 4

shona
shona

Reputation: 101

(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

you got it right, the only thing you need is the null at the end when you finish thats all.

Upvotes: 6

Jo&#227;o Silva
Jo&#227;o Silva

Reputation: 91299

For the first question, you can indeed use the ternary operator, but a simpler solution would be to use a String[] with the month descriptions, and then subscript this array:

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

Now, for your second question, the ternary operator seems more appropriate since you have fewer conditions, although an if would be much easier to read, imho:

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

Contrast this with the ternary operator:

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

Upvotes: 60

FThompson
FThompson

Reputation: 28687

You are handling the idea of a if-else-if situation in a ternary correctly, but your syntax was slightly off (as you said it might be).

I would, however, change it slightly so that extra conditions aren't checked unnecessarily.

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

But your best option is just to use if and else statements for the sake of code readability.

Upvotes: 1

willglynn
willglynn

Reputation: 11520

Parentheses are like violence: if it's not working, use more.

But seriously:

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

And please, don't ever write code like that for anything important.

Upvotes: 16

Related Questions