Подтвердить что ты не робот

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

Прежде всего, возникает вопрос: "Напишите программу 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.");
    }
}

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

4b9b3361

Ответ 1

Try

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

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

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

Ответ 2

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

Сначала рассмотрим, как записать 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);
    }
}

Ответ 3

Вы тестируете 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

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

Ответ 5

Мое решение:

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

Ответ 6

Мой вклад...

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

Ответ 7

Я знаю это поздно. Только для информации это также работает:

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

Ответ 8

Последняя часть: (z<y && z<x) ? z отсутствует ':':

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

Ответ 9

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

Ответ 10

Лучший способ сделать это - сделать пример, используя оператор if и else, а затем применить к нему тернарные операторы  (Д

Ответ 11

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

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

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