如何获取数字的最大值和最小值

时间:2016-12-13 19:31:00

标签: java

我试图创建一个程序来获取用户输入的数字的最大值和最小值。

以下是代码:

Scanner in = new Scanner(System.in);
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
int value;
boolean isInt;
System.out.print("Enter an integer: ");
isInt = in.hasNextInt();
if (isInt == true){
value = in.nextInt();
}
for (int i = 0; isInt == true; i = i){
    System.out.print("Enter an integer: ");
    isInt = in.hasNextInt();
    if (isInt == true){
        value = in.nextInt();
    }
}
System.out.println(min);
System.out.println(max);

输出结果为:
   2147483647个
  -2147483648

代码中的错误是什么?

4 个答案:

答案 0 :(得分:4)

Min和Max of integer的定义不是从输入中获取Min和MAX。

它们是恒定的值。

MAX_VALUE 保持int的最大值的常量可以是2 31 -1。

MIN_VALUE 保持int的最小值的常量可以是-2 31

答案 1 :(得分:2)

初始化后,您永远不会在任何地方更改override func controlTextDidChange(_ obj: Notification) { run some code here }max

答案 2 :(得分:2)

第一件事:你拥有的不是伪代码。这只是糟糕的实际代码。

要回答您的直接问题,您需要将minmax的值设置为初始值以外的值。他们不会神奇地更新自己。

您正在做的其他一些事情可能应该修复:

  • 由于isIntboolean,您无需将其与true进行比较即可获得boolean值:if(isInt)没问题。
  • 每次在nextInt()上致电Scanner时,您都会使hasNextInt()的上一个结果无效。换句话说,一旦你得到下一个int,你就不知道在你再次调用hasNextInt()之前输入中会有另一个。你的for循环就是这个假设。

这是一个代码版本,它不仅修复了上面提到的三个问题,而且还正确地缩进了:

Scanner in = new Scanner(System.in);
int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;
int value;
System.out.print("Enter an integer: ");
while(in.hasNextInt())
{
    System.out.print("Enter an integer: ");
    value = in.nextInt();
    if(value < min)
    {
        min = value;
    }
    if(value > max)
    {
        max = value;
    }
}
System.out.println(min);
System.out.println(max);

请注意,在将else与当前valuemin进行比较时,我不会使用max子句。这将确保minmax正确设置为第一个输入,即使序列中只有一个数字。

答案 3 :(得分:1)

您的代码中没有任何地方可以更改max或min的值。如果要打印输入数字的最小值和最大值,可以进行最大值和最小值的比较。最简单的方法如下所示,在输入整数值后插入:

if(value > max)
    max = value;
if(value < min)
    min = value;

您应该删除这些行,并且不再需要它们:

System.out.print("Enter an integer: ");
isInt = in.hasNextInt();
if (isInt == true)
{
value = in.nextInt();
}

此外,isInt和value都必须初始化为一个值。