Множественные условия в троичных операторах - PullRequest
16 голосов
/ 13 февраля 2011

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

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

Ответы [ 11 ]

26 голосов
/ 13 февраля 2011

Попробуйте

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

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

int min = x < y ? x < z ? x : z : y < z ? y : z;
14 голосов
/ 13 февраля 2011

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

Сначала выясните, как написать 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);
    }
}
4 голосов
/ 13 февраля 2011

Вы тестируете для 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.");
    }
}
2 голосов
/ 18 июня 2015

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

int smallestNum = (x<y ? x : (x=y)) < z ? x : z
2 голосов
/ 14 февраля 2011
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);
}
1 голос
/ 03 ноября 2012

Мой вклад ...

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 голос
/ 23 апреля 2012

Мое решение:

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 голос
/ 13 февраля 2011

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

(z<y && z<x) ? z : some_value;
0 голосов
/ 01 февраля 2018

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

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

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

0 голосов
/ 22 февраля 2014

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

...