根据输入查找最小整数

时间:2012-02-20 19:54:47

标签: java

我有一项任务,可以找到用户输入的最小,最大和平均数字。基本上,它们输入正整数,由空格分隔,Java滚动它们并将它们相加。我能够找到总和,平均值和最大整数,但是,我无法找到最小的整数。我认为解决这个问题的最好方法是将表示最小int的变量设置为等于表示循环外部最大int的变量。然后,在循环中,执行以下操作:

        if(getInt < min)
        {
            min = getInt;
        }

其中getInt是用户输入的值,min是最小整数值。但是,每次运行此操作时,min都会返回0。

这是我的完整代码:

import java.util.Scanner;

public class exc5
{
    public static void main (String[] args)
    {  
        System.out.println("Write a list of nonnegative integers, each seperated by a space. To signal the end of the list, write a negative integer. The negative integer will not be counted");
        Scanner keyboard = new Scanner (System.in);
        keyboard.useDelimiter(" |\n");

        int count = 0;
        int sum = 0;
        int max = 0;
        int min = max;
        double average = 0;

        boolean notNull = true;

        while(notNull == true)
        {
            int getInt = keyboard.nextInt();

            if(getInt < 0)
            {
                notNull = false;
            }  
            else
            {          
                if(getInt > max)
                {
                    max = getInt;
                }

                if(getInt < min)
                {
                    min = getInt;
                }

                sum += getInt;
                count++;
                average = (sum)/(count);
            }
        }

        System.out.println("Sum = " + sum);
        System.out.println("Average = " + average);
        System.out.println("Max = " + max);
        System.out.println("Minimum = " + min);
    }

}

感谢任何帮助!

8 个答案:

答案 0 :(得分:9)

您最初应将min设为Integer.MAX_VALUE,将max设为Integer.MIN_VALUE

答案 1 :(得分:6)

您需要从较大的min开始,而不是0(只有负数小于0)。试试这个:

int min = Integer.MAX_VALUE;

这是一个相当标准的模式。此外,为了“正确”,您的代码还应包括:

int max = Integer.MIN_VALUE;

然后处理整数范围的整数输入,正负。

编辑:

另一种更“经典”的方法是使用对象引用,而不是原语(总是具有值),因此初始状态可以很容易地区分为{{1} }。在这种情况下,使用null而不是Integer值可以测试int。如果我是大学教授标记这样的工作,我宁愿看到对象方法 - 使用基元的最小/最大值将起作用,但这有点像“技巧”。

代码看起来像这样:

null

Integer min; while (...) { if (min == null || getInt < min) { min = getInt; } } 相似。

答案 2 :(得分:3)

此:

        int max = 0;
        int min = max;

min初始化为零。 (毕竟,max还没有成为最大的整数。)所以这个:

                if(getInt < min)

永远不会成真。尝试更改此内容:

        int min = max;

到此:

        int min = Integer.MAX_VALUE; // largest possible Java `int`

答案 3 :(得分:1)

那是因为你要分配min = 0,所以很明显,除非你输入一个低于0的数字,最小值为0.你应该将min初始化为Integer.MAX_VALUE

int min = Integer.MAX_VALUE;

( 或者:

int min = 0xFFFFFFFF;

只是为了黑客攻击:P。使用第一个! :) )

答案 4 :(得分:1)

您将min设置为零,因此(由于输入为正),所有输入都不会小于min

执行此操作的常规方法是将max的初始值设置为Integer.MIN_VALUE,将min的初始值设置为Integer.MAX_VALUE

这可以确保任何输入值都会影响minmax中的至少一个 - 通常都是!

答案 5 :(得分:1)

用0初始化min。尝试使用Integer.MAX_VALUE初始化,即最好这样做:

int max = Integer.MIN_VALUE;
int min = Integer.MAX_VALUE;

否则,您的支票:

if(getInt < 0)

将突破循环,你永远不会超过0。

答案 6 :(得分:1)

您的计划的完全正常工作和“已清理”版本:

import java.util.Scanner;

public class exc5
{
    public static void main ( String [] args )
    {
        Scanner keyboard = new Scanner( System.in );
        int count = 0;
        int sum = 0;
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;
        double average = 0;
        boolean notNull = true;

        while ( notNull == true )
        {
            int getInt = keyboard.nextInt();

            if ( getInt < 0 )
                notNull = false;
            else
            {
                if ( getInt > max )
                    max = getInt;

                if ( getInt <= min )
                    min = getInt;

                sum += getInt;
                count++;
            }
        }

        average = ( sum ) / ( count );

        System.out.println( "Sum = " + sum );
        System.out.println( "Average = " + average );
        System.out.println( "Max = " + max );
        System.out.println( "Minimum = " + min );
    }

}

答案 7 :(得分:1)

你有min设置为0开始,所以getInt永远不会少。你应该在循环开始时设置min,这将解决你的问题。