-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

只需将您的初始化d设置为Integer.MAX_VALUE.

于 2012-08-27T02:17:14.113 回答
0

我对你的代码有一个建议,你应该让每个变量名都有意义。也许你的代码很小,但它会影响你的习惯,当你在大型项目中工作时,你的习惯会对你产生很大的影响:)

您应该将初始化部分更改d = 0d = 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 时,你的程序会看到:哦,15>10,所以这不是最小值。但实际上,15 是输入的第一个值,应该是最小值。除非有人键入小于 10 的数字,否则您的程序将出错。

与您的代码比较,因为您初始化d=0. 当您键入d=1, ops, 1>0 时,这不是最小值(如上例)。只有当您键入一些 < 0 的数字时,一切才会正确。

上述所有问题都会发生,因为尽管用户键入了任何数字,但 min 是初始化数字。(用户不输入的数字)。这就是为什么你将你的最小值设置为非常大的东西。所以,你第一次输入一些数字,它已经是最小

因为机器不像我们,没有“无穷大”,所以我们必须尽可能地设置它的最大值。而且因为 d 是一个 int,所以 int 的最大值是Integer.MAX_VALUE。实际上,您可以为 d 键入数字。我不记得确切,但整数的最大值在 32000 (2^31) 范围内。

于 2012-08-27T02:50:27.310 回答