-1

入力されたすべての数値の最小値を見つけるアプリケーションを作成しています。ダイアログ ボックスから数値を受け取り、ユーザーが 0 を入力すると、すべての数値の最小値が表示されます。しかし、0 は必要ありませんが、数値の最小値は必要ありません。その前に。

私のコードは次のとおりです。

    try {
        int a, c = 0, d = 0;

        do {
            a = Integer.parseInt(jOptionPane1.showInputDialog(null, "please enter the number"));

            c = Math.min(a, d);
            if (a != 0) //since a=0 will be excecuted one time
            {
                d = c;
            }
        } while (a != 0);

        lb2.setText("Minimum of the numbers is " + d);



    } catch (Exception e) {
        jOptionPane1.showMessageDialog(this, "Some thing went wrong");
    }

入力された数値の最小値がゼロであるため、0が返されることを知っています。0未満の数値(つまり、負の数値)を入力すると、正しい答えが得られます。問題は、cの初期化にも起因すると思います=0。

ここで、配列を使用せずに最小値を見つける方法が必要です。これはシンプルで簡単なはずです (Math.min 自体を使用する場合に最も役立ちます)。

どんな助けでも感謝します。

4

2 に答える 2

4

初期設定を set dset toに変更するだけInteger.MAX_VALUEです。

于 2012-08-27T02:17:14.113 に答える
0

あなたのコードについて、すべての変数名を意味のあるものにするべきだというアドバイスがあります。おそらくあなたのコードは小さいかもしれませんが、それはあなたの習慣に影響を与えます.大規模なプロジェクトで作業するとき、あなたの習慣はあなたに大きな影響を与えます:)

の初期化部分をd = 0に変更する必要がありますd = Integer.MAX_VALUE。ここに新しいコードがあります:

try {
        int inputNumber = 0, min= Integer.MAX_VALUE;
        // int c : you don't need this variable

        do {
            inputNumber = Integer.parseInt(jOptionPane1.showInputDialog(null, "please enter the number"));

            if (inputNumber != 0) //since a=0 will be excecuted one time
            {
                min= inputNumber;
            }
        } while (inputNumber != 0);

        lb2.setText("Minimum of the numbers is " + min);



    } catch (Exception e) {
        jOptionPane1.showMessageDialog(this, "Some thing went wrong");
    }

この新しいコードはより理にかなっていますか?

そして、なぜあなたは初期化をに変更しなければならないのmin= Integer.MAX_VALUEですか?たとえば、次のように初期化しますmin = 10;。そして、最初に誰かが 15 と入力すると、プログラムは次のように表示されます: Oh, 15>10 なので、これは最小値ではありません。しかし実際には、15 は入力の最初の値であり、最小値である必要があります。誰かが 10 未満の数字を入力するまで、あなたのプログラムは間違っているでしょう。

を初期化するため、コードと比較してくださいd=0d=1, ops, 1>0 と入力すると、これは最小値ではありません (上記の例のように)。そして、いくつかの数値 < 0 を入力した場合にのみ、すべてが true になります。

上記の問題はすべて、ユーザーが任意の数値を入力しても最小値が初期化数値であるため発生します。(ユーザーが入力しない番号)。それが、最小値を本当に本当に大きなものに設定する理由です。したがって、最初にいくつかの数字を入力すると、それはすでに最小です

私たちのような機械には「無限大」がないので、可能な限り大きな値を設定する必要があります。また、d は int であるため、int の最大値は ですInteger.MAX_VALUE。実際、d には number を入力できます。正確には覚えていませんが、範囲 32000 (2^31) の整数の最大値です。

于 2012-08-27T02:50:27.310 に答える