簡體   English   中英

計算輸入數字的最大值和平均值

[英]calculating max and average of input numbers

這是我的代碼

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);

}

但現在的問題是最大值始終為 0,平均值始終接近於 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 && age >=1 && age <=120) 但沒有用

有可能立即輸入 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 是不可能的。

average的值並未在通過main()方法的每個邏輯路徑中設置,因此出現警告。

您可能應該在聲明時初始化它,例如:

double average = 0.0;

或者,您可以利用您不需要每次通過while循環重新計算平均值的事實。 如果你只聲明和計算一次,在循環之后,該值將始終被設置。

你有一個方法

public static double getAve (int sum, int count)

但你用

average = getAve(count, sum);

所以你的論點是相反的順序。

第二個問題是你在這里使用max

maximum = getMax(maximum, age);

和這里

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

但你的真正價值是maximum ,所以也切換一下。

請使用此代碼,這將產生您所需的輸出,

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

在您的代碼中進行了以下更改,

  • 使用 do while 循環代替 while 循環。
  • 您將 max 作為參數傳遞給 getMax() 但您需要將 max 作為參數傳遞。
  • Double 被初始化為 0。

如果您有任何疑問,請在下面發表評論。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM