Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 995
Evan Welser Avatar asked Sep 23 '12 00:09

Evan Welser


People also ask

Can a ternary operator have multiple conditions?

We can nest ternary operators to test multiple conditions.

Can ternary operator have 3 conditions?

The conditional (ternary) operator is the only JavaScript operator that takes three operands: a condition followed by a question mark ( ? ), then an expression to execute if the condition is truthy followed by a colon ( : ), and finally the expression to execute if the condition is falsy.

Can we write multiple statements in ternary operator in Java?

Just like nesting in if-else statement, you can do that using Ternary Operator in Java by chaining more than one Java ternary operator together.


2 Answers

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";
like image 188
João Silva Avatar answered Sep 30 '22 15:09

João Silva


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.

like image 37
willglynn Avatar answered Sep 30 '22 16:09

willglynn