计算输入数字的最大值和平均值

时间:2016-09-19 05:07:22

标签: java

这是我的代码

import java.util.*;
public class testq
{
    public static void main (String [] args)
    {
        int max = 0;
        int sum = 0;
        int count = 0;
        int age, maximum;
        double average;

        Scanner sc = new Scanner(System.in);
        age = sc.nextInt();
        while (age != 0)
        {
            System.out.println("enter age");
            age = sc.nextInt();

            if (age < 0 && age > 120)
            {
                System.out.println("enter numbers between 1 to 120");
                age = sc.nextInt();
            }

            else
            {
                count ++;
                sum = sum + age;
                maximum = getMax(max, age);
                average = getAve(sum, count);
            }
        }
        System.out.println(" max is" + max + "average is" + average);

    }

    public static int getMax (int max, int age)
    {
        if (max < age)
        {
            max = age;
        }
        return max;
    }

    public static double getAve (int sum, int count)
    {
        double average;
        average = (double)sum / (double)count;
        return average;
    }
}

这就是我需要输入1到120之间的值,直到输入0并计算这些值的最大值和平均值如果我编译此代码我收到错误消息

“平均值可能尚未初始化”

我在考虑计数可能有些错误,所以计算平均值的方法可能没有正确执行。我不能想到除此之外的任何事情,我能得到帮助吗?

编辑*

我的代码现在看起来像这样

import java.util.*;
public class testq 
{
    public static void main (String [] args)
    {
        int max = 0;
        int sum = 0;
        int count = 0;
        int age, maximum;
        double average;

        Scanner sc = new Scanner(System.in);
        System.out.println("enter age");
        age = sc.nextInt();
        while (age != 0)
        {
            System.out.println("enter age");
            age = sc.nextInt();

            if (age < 0 || age > 120)
            {
                System.out.println("enter numbers between 1 to 120");
                age = sc.nextInt();
            }

            else
            {
                count ++;
                sum = sum + age;
            }
        }
        maximum = getMax(max, age);
        average = getAve(count, sum);
        System.out.println(" maximum is " + max + "average is " + average);

}

但现在问题是max总是0而且average总是接近0.当我输入数字时它也会接受负值,例如

enter age
-10
enter age
-10
enter numbers between 1 to 120
-10
enter age
-10
enter numbers between 1 to 120
0

我想输出“每次输入无效数字时输入1到120之间的数字

我已经尝试将while条件更改为(age!= 0&amp;&amp; age&gt; = 1&amp;&amp; age&lt; = 120)但是没有工作

4 个答案:

答案 0 :(得分:1)

可以立即输入0,并且永远不会设置平均值。因此,当您尝试打印它时会出错。您可以在print语句之前(并且在while循环之外)将您的调用移动到getAve(),因为您只需要调用一次。

    average = getAve(sum, count);
    System.out.println(" max is " + max + " average is " + average);

另外,我猜你应该在你的情况下使用“或”而不是“和”。

if (age < 0 || age > 120)

而不是:

if (age < 0 && age > 120)

年龄不可能小于零且大于120.

答案 1 :(得分:0)

通过average方法的每个逻辑路径都未设置main()的值,因此会出现警告。

您应该在声明时初始化它,例如:

double average = 0.0;

或者,您可以利用每次通过while循环不需要重新计算平均值的事实。如果只声明并计算一次,在循环之后,将始终设置该值。

答案 2 :(得分:0)

请使用此代码,这将产生您所需的输出,

public static void main(String[] args) {

        //int max = 0;
        int sum = 0;
        int count = 0;
        int age, maximum=0;
        double average= 0;

        Scanner sc = new Scanner(System.in);
        do {
            System.out.println("enter age");
            age = sc.nextInt();

            if (age <0||age > 120)
            {
                System.out.println("enter numbers between 1 to 120");
                //age = sc.nextInt();
            }

            else
            {
                count ++;
                sum = sum + age;
                maximum = getMax(maximum, age);
                                }
        }while(age != 0);
        average = getAve(sum, count);
        System.out.println("max is" + maximum + "\naverage is" + average);

    }

    public static int getMax (int max, int age)
    {
        if (max < age)
        {
            max = age;
        }
        return max;
    }

    public static double getAve (int sum, int count)
    {
        double average;
        average = (double)sum / (double)count;
        return average;
    }

输出:

enter age
3
enter age
6
enter age
3
enter age
120
enter age
121
enter numbers between 1 to 120
enter age
500
enter numbers between 1 to 120
enter age
6
enter age
0
 max is120
average is23.0

您的代码中进行了以下更改

  • 使用while循环而不是while循环。
  • 你传递max作为getMax()的参数但你需要传递最大值 一个论点。
  • Double初始化为0.

如果您有任何疑问,请在下面发表评论。

答案 3 :(得分:0)

你有一个方法

public static double getAve (int sum, int count)

但你使用

average = getAve(count, sum);

所以你的论点是相反的。

第二个问题是你在这里使用max

maximum = getMax(maximum, age);

在这里

System.out.println(" maximum is " + max

但你的真实价值是maximum,所以也要改变它。