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

<p>прежде всего, возникает вопрос: «напишите программу на java, чтобы найти наименьшее из трех чисел, используя троичные операторы».</p><p>вот мой код:</p><pre><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."); } } </code></pre><p>я пытался использовать несколько условий в троичном операторе, но это не работает. я отсутствовал несколько дней, поэтому я не совсем уверен, что делать, и телефон моего учителя выключен. любая помощь?</p>

<p>пытаться</p><pre><code>int min = x < y ? (x < z ? x : z) : (y < z ? y : z); </code></pre><p>вы также можете удалить скобки:</p><pre><code>int min = x < y ? x < z ? x : z : y < z ? y : z; </code></pre>

<p>так как это домашнее задание, я не просто дам вам ответ, но вместо этого алгоритм, чтобы вы могли решить это самостоятельно.</p><p>сначала выясните, как написать min (x, y), используя один троичный оператор.</p><p>получив это, измените следующий код для min (x, y, z), чтобы использовать троичный оператор, а затем замените в коде min (x, y), который вы отработали на предыдущем шаге.</p><pre><code>int min(x, y, z) { if (x <= y) { return min(x, z); } else { return min(y, z); } } </code></pre>

<p>вы тестируете для z, когда вам действительно не нужно. ваш троичный оператор должен иметь форму cond? iftrue: iffalse;</p><p>так что если у вас есть несколько условий, у вас есть это:</p><p>cond1? iftrue1: cond2? если true2: iffalse2;</p><p>если вы понимаете это, не смотрите ниже. если вам все еще нужна помощь, посмотрите ниже.</p><p>я также включил версию, которая не вкладывает их, что является более четким (при условии, что вам не нужно, чтобы они были вложенными. я уверен, что надеюсь, что ваше назначение не требует, чтобы вы вложили их, потому что это довольно уродливо!)</p><p>,.</p><p>,.</p><p>вот что я придумаю:</p><pre><code>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."); } } </code></pre>

<pre><code>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); } </code></pre>

<p>я знаю, что уже поздно. просто для информации это также работает:</p><pre><code>int smallestnum = (x<y ? x : (x=y)) < z ? x : z </code></pre>

<p>мой вклад ... </p><pre><code>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 ) ); } </code></pre>

<p>в последней части: <code>(z<y && z<x) ? z</code> отсутствует знак ':':</p><pre><code>(z<y && z<x) ? z : some\_value; </code></pre>

<p>мое решение:</p><pre><code>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."); } </code></pre>

<p>этот ответ приходит через семь лет с опозданием, поэтому я просто дам вам код:</p><pre><code>int smallestnumber = (x > y) ? ((y > z) ? z : y) : ((x > z) ? z : x); </code></pre><p>отступ должен объяснять код, который является просто троичным, который оценивает другие троичные по начальному условию <code>x > y</code>;/* первый троичный объект будет оценен, если это условие истинно, иначе будет получено второе. * /</p>