Mike
Mike

Reputation: 229

Multiple conditions in ternary operators

First off, the question is "Write a Java program to find the smallest of three numbers using ternary operators."

Here's my code:

class questionNine
{
    public static void main(String args[])
    {
        int x = 1, y = 2, z = 3;
        int smallestNum;

        smallestNum = (x<y && x<z) ? x : (y<x && y<z) ? y : (z<y && z<x) ? z;
        System.out.println(smallestNum + " is the smallest of the three numbers.");
    }
}

I tried to use multiple conditions in the ternary operator but that doesn't work. I was absent a few days so I'm not really sure what to do and my teacher's phone is off. Any help?

Upvotes: 22

Views: 135870

Answers (14)

Sushant
Sushant

Reputation: 1

public class questionNine{
  public static void main(String args[]){
    int x = 1, y = 2, z = 3;
    int smallestNum =  (x<y && x<z) ? x : ((y < x && y<z) ? y : z);
    System.out.println(smallestNum);
  }
}

Upvotes: 0

News24 tak
News24 tak

Reputation: 9

public static void main(String args[]) {
    Scanner sc=new Scanner(System.in);
    System.out.println("enter the number and check heigest number of three number:-");
    int a=sc.nextInt();
    int b=sc.nextInt();
    int c=sc.nextInt();
    int max;
    max=(a>b&&a>c)?a:(b>a&&b>c)?b:(c>a&&c>b)?c:(a==b&&b==c)?a:0;
    
    System.out.println("the heigest number is:"+max);
    

Upvotes: 1

Mm Mmm
Mm Mmm

Reputation: 1

you missed the value after z var smallestNum = (x<y && x<z) ? x : (y<x && y<z) ? y : (z<y && z<x) ? z:0; Try this, it works

Upvotes: 0

Edward J Beckett
Edward J Beckett

Reputation: 5140

My contribution ...

public static int getSmallestNumber( int x, int y, int z) {

     return x < y && x < z ? x : y < x && y < z ? y : z;
}

public static void main ( String ... args ) {

    System.out.println( getSmallestNumber( 123, 234, 345 ) );
}

Upvotes: 1

Mike Warren
Mike Warren

Reputation: 3866

This answer is coming in seven years late, so I'll just give you the code:

int smallestNumber = (x > y) ? 
            ((y > z) ? z : y) : 
            ((x > z) ? z : x);

The indentation should explain the code, which is simply a ternary that evaluates other ternaries on the initial condition x > y; /* the first ternary gets evaluated if that condition is true, else the second one gets evaluated. */

Upvotes: 0

Marek
Marek

Reputation: 21

I know it's late. Just for information this also works:

int smallestNum = (x<y ? x : (x=y)) < z ? x : z

Upvotes: 2

teena
teena

Reputation: 1

best way to do this is to make an example using if and else statement and then apply the ternary operators on it (q

Upvotes: -1

muthukumar
muthukumar

Reputation: 2243

My solution:

public static void main(String args[])
{
    int x = 1, y = 2, z = 3;
    int smallestNum = (x < y && x < z) ? x :
        (y < x && y < z) ? y :
        (z < y && z < x) ? z:y;
    System.out.println(smallestNum + " is the smallest of the three numbers.");
}

Upvotes: 1

lukastymo
lukastymo

Reputation: 26809

public static int min(int x, int y, int z) {
    return x<y?Math.min(x, z):Math.min(y, z);           
}

public static void main(String[] args) {
    int smallestNum = min(10, 12, 15);
    System.out.println(smallestNum);
}

Upvotes: 2

corsiKa
corsiKa

Reputation: 82559

You're testing for z, when you really don't need to. Your ternary operator must be of form cond ? ifTrue : ifFalse;

so if you have multiple conditions, you have this:

cond1? ifTrue1 : cond2? if True2 : ifFalse2;

If you understand this, don't look below. If you still need help, look below.

I also included a version that doesn't nest them that is clearer (assuming you don't need to have them nested. I sure would hope your assignment doesn't require you to nest them because that's pretty ugly!)

.

.

Here's what I come up with:

class QuestionNine
{
    public static void main(String args[])
    {
        smallest(1,2,3);
        smallest(4,3,2);
        smallest(1,1,1);
        smallest(5,4,5);
        smallest(0,0,1);
    }

    public static void smallest(int x, int y, int z) {
        // bugfix, thanks Mark! 
        //int smallestNum = (x<y && x<z) ? x : (y<x && y<z) ? y :  z;
        int smallestNum = (x<=y && x<=z) ? x : (y<=x && y<=z) ? y :  z;
        System.out.println(smallestNum + " is the smallest of the three numbers.");
    }

    public static void smallest2(int x, int y, int z) {
       int smallest = x < y ? x : y; // if they are equal, it doesn't matter which
       smallest = z < smallest ? z : smallest;
       System.out.println(smallest + " is the smallest of the three numbers.");
    }
}

Upvotes: 5

Marcin Michalski
Marcin Michalski

Reputation: 1266

int min = (x<y)?((x<z)?x:z):((y<z)?y:z);

Upvotes: -1

Mark Byers
Mark Byers

Reputation: 838106

Since this is homework I'm not just going to give you the answer, but instead an algorithm so that you can work it out yourself.

First work out how to write min(x, y) using a single ternary operator.

Once you have that, change the following code for min(x, y, z) to use a ternary operator then substitute in the code for min(x, y) that you worked out from the previous step.

int min(x, y, z) {
    if (x <= y) {
        return min(x, z);
    } else {
        return min(y, z);
    }
}

Upvotes: 14

Markus Johnsson
Markus Johnsson

Reputation: 4019

Try

int min = x < y ? (x < z ? x : z) : (y < z ? y : z);

You can also remove the parenthesis:

int min = x < y ? x < z ? x : z : y < z ? y : z;

Upvotes: 35

extraneon
extraneon

Reputation: 23950

The last part: (z<y && z<x) ? z is missing a ':' :

(z<y && z<x) ? z : some_value;

Upvotes: 1

Related Questions