it-swarm-ru.tech

Множественные условия в троичных операторах

Прежде всего, возникает вопрос: «Напишите программу на Java, чтобы найти наименьшее из трех чисел, используя троичные операторы».

Вот мой код:

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.");
    }
}

Я пытался использовать несколько условий в троичном операторе, но это не работает. Я отсутствовал несколько дней, поэтому я не совсем уверен, что делать, и телефон моего учителя выключен. Любая помощь?

16
Mike

Пытаться

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

Вы также можете удалить скобки:

int min = x < y ? x < z ? x : z : y < z ? y : z;
25
Markus Johnsson

Так как это домашнее задание, я не просто дам вам ответ, но вместо этого алгоритм, чтобы вы могли решить это самостоятельно.

Сначала выясните, как написать min (x, y), используя один троичный оператор.

Получив это, измените следующий код для min (x, y, z), чтобы использовать троичный оператор, а затем замените в коде min (x, y), который вы отработали на предыдущем шаге.

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

Вы тестируете для z, когда вам действительно не нужно. Ваш троичный оператор должен иметь форму cond? ifTrue: ifFalse;

так что если у вас есть несколько условий, у вас есть это:

cond1? ifTrue1: cond2? если True2: ifFalse2;

Если вы понимаете это, не смотрите ниже. Если вам все еще нужна помощь, посмотрите ниже.

Я также включил версию, которая не вкладывает их, что является более четким (при условии, что вам не нужно, чтобы они были вложенными. Я уверен, что надеюсь, что ваше назначение не требует, чтобы вы вложили их, потому что это довольно уродливо!)

,.

,.

Вот что я придумаю:

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.");
    }
}
4
corsiKa
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);
}
2
smas

Я знаю, что уже поздно. Просто для информации это также работает:

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

Мой вклад ... 

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 ) );
}
1
Eddie B

В последней части: (z<y && z<x) ? z отсутствует знак ':':

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

Мое решение:

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.");
}
1
muthukumar

Этот ответ приходит через семь лет с опозданием, поэтому я просто дам вам код:

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

Отступ должен объяснять код, который является просто троичным, который оценивает другие троичные по начальному условию x > y;/* первый троичный объект будет оценен, если это условие истинно, иначе будет получено второе. * /

0
Mike Warren