使用“方法”计算用户输入的五到十个数字的平均值

时间:2017-07-06 00:46:54

标签: java

我的作业要求我提示用户输入5到10个数字,然后计算这些数字的平均值。我还必须使用方法来这样做。我的问题是,如果我不确定他们是否会输入5或10个数字,我如何让程序计算平均值?下面是我到目前为止,我也很难理解如何在main方法中执行方法,但我认为我有正确的方法思路。提前致谢!

修改

有人建议我格式化如下所示,但我的问题是它在用户输入数字后没有打印任何内容,任何人都能看到我错过的内容吗?我想也许我在main方法中做错了什么?

public class AverageWithMethods {

    public static void main(String[] args) {
        String userNumbers = getUserNums();
        double average = userNumAvg(userNumbers);
        printAverage(0, userNumbers);

    }

    public static String getUserNums() {
        Scanner in = new Scanner(System.in);
        String userNumInput = "";
        System.out.print("Please enter five to ten numbers separated by spaces: ");
        userNumInput = in.nextLine();
        return userNumInput;
    }

    public static double userNumAvg(String userNumInput) {
        Scanner in = new Scanner(System.in);
        Scanner line = new Scanner(in.nextLine());

        double count = 0;
        double average = 0.0;
        double sum =0;


        while (in.hasNextDouble()) {
            count++;
            sum = line.nextDouble();

        }
        if (count != 0) {
            average = sum / count;
            count = Double.parseDouble(userNumInput); 
        }

        return average;
    }

    public static void printAverage(double average, String userNumInput) {
        System.out.printf("The average of the numbers " + userNumInput + " is %.2f", average);

    }
}

3 个答案:

答案 0 :(得分:1)

计算字符串中有多少个空格。您可以通过循环和检查char值来执行此操作,也可以对字符串执行替换并比较新String的大小

e.g。

    String fiveNums = "1 2 3 4 5";
    String noSpaces = fiveNums.replace(" ", "");
    System.out.println(fiveNums.length() - noSpaces.length());

答案 1 :(得分:0)

从您的第一部分代码开始,我假设所有数字都是一次性输入一行。

  

我的问题是,如果我不确定他们是否会输入5或10个数字,我该如何让程序计算平均值?

您使用的Scanner对象有一个方法hasNextInt(),因此您可以构建一个简单的while循环来计算出有多少个数字。

Scanner line = new Scanner(in.nextLine()); // Feed line into scanner
int numbers = 0;
double total = 0.0;
while(in.hasNextInt()) { // read all the numbers
    numbers++;
    total += line.nextDouble();
}
line.close(); // Good habit

然后,您可以使用以下所有信息计算平均值:

double avg = total/numbers;

备注:

  • 在计算平均值时,将total设为double以避免整数运算。显然有其他方法可以避免整数数学,如果你愿意,我可以加入更多。

  • 我使用Scanner参数String的第二个in.nextLine(),因为如果跳过该步骤,则在读取连续输入流时代码不会终止例如控制台/终端。这是因为终端仍然接受输入,因此可能存在下一个int。

答案 2 :(得分:0)

当您想了解输入用户的数量时,您可以:

String[] userNumInput = in.nextLine().split(" ");
int quantity = userNumInput.length;

用户输入quantity个数字。

以下是您原始代码的可能方法之一:

import java.util.Scanner;

public class GetAverage {

    public GetAverage() {
        String getStr = getUserNums();
        double result = userAvg(getStr);
        printAverage(result, getStr);

    }

    public String getUserNums() {
        Scanner in = new Scanner(System.in);
        System.out.println("Please enter five to ten numbers separated by spaces: ");
        return in.nextLine();
    }

    public static double userAvg(String str) {
        String[] arr = str.split(" ");
        double sum = 0.0;
        double average = 0.0;
        for (int i = 0; i < arr.length; i++) {
            sum += Integer.parseInt(arr[i]);
        }
        if (arr.length > 0) {
            average = sum / arr.length;
        }

        return average; // how do I get the program to count what to divide by since user can input 5- 10?
    }

    public static void printAverage(double average, String userNumInput) {
        System.out.printf("The average of the numbers " + userNumInput + "is %.2f", average);

    }

    public static void main(String[] args) {
        new GetAverage();

    }
}

<强>输出:

Please enter five to ten numbers separated by spaces: 
5 7 8 9 6 3 2 4
The average of the numbers 5 7 8 9 6 3 2 4is 5.50