21

まず、問題は「三項演算子を使用して 3 つの数値の中で最小のものを見つける 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.");
    }
}

三項演算子で複数の条件を使用しようとしましたが、うまくいきません。数日間欠席したので、どうしようか迷っていて、先生の電話が切れています。何か助けはありますか?

4

14 に答える 14

36

試す

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

かっこを削除することもできます。

int min = x < y ? x < z ? x : z : y < z ? y : z;
于 2011-02-13T20:32:40.330 に答える
14

これは宿題なので、ただ答えを出すのではなく、自分で解決できるようにアルゴリズムを示します。

最初に、単一の三項演算子を使用して 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);
    }
}
于 2011-02-13T20:32:48.973 に答える
5

本当に必要がないときに、z をテストしています。三項演算子は cond ? の形式でなければなりません。ifTrue : ifFalse;

したがって、複数の条件がある場合は、次のようになります。

条件1? 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.");
    }
}
于 2011-02-13T20:34:29.807 に答える
2

I know it's late. Just for information this also works:

int smallestNum = (x<y ? x : (x=y)) < z ? x : z
于 2015-06-18T20:59:44.680 に答える
1

私の解決策:

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.");
}
于 2012-04-23T03:14:13.050 に答える
1

最後の部分:(z<y && z<x) ? zに「:」がありません:

(z<y && z<x) ? z : some_value;
于 2011-02-13T20:32:16.283 に答える
1

私の貢献...

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 ) );
}
于 2012-11-03T01:58:13.570 に答える
-1

これを行う最善の方法は、if および else ステートメントを使用して例を作成し、それに三項演算子を適用することです (q

于 2014-02-22T07:01:13.693 に答える
-1
int min = (x<y)?((x<z)?x:z):((y<z)?y:z);
于 2011-02-13T20:36:10.123 に答える