web-dev-qa-db-ja.com

三項演算子の複数の条件

まず、質問は「Javaプログラムを記述して、3項演算子を使用して3つの数値の最小値を見つける」です。」

ここに私のコードがあります:

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;
27
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
lukastymo

遅いことはわかっています。情報だけでこれも機能します:

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

この回答は7年遅れで届くので、コードをお伝えします。

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

インデントは、コードを説明する必要があります。コードは、初期条件x > y;/*その条件が真の場合、最初の3項が評価されます。それ以外の場合、2項が評価されます。 * /

0
Mike Warren