在Java中使用三种方法查找平均值

时间:2017-10-22 03:05:31

标签: java methods average

我有一个类似的问题:Finding average using three methods and a for loop in java 除了我们还没有学过数组。如何通过不使用数组获得相同的解决方案?基本上我要问的是你如何取一个字符串中所有数字的平均值?

unwanted

3 个答案:

答案 0 :(得分:0)

假设您已经知道如何解析字符串中的数字,这将是第一步,和另一个问题,如果您不 ..然后你可以使用一种方法:

public static float additiveAverage(float currentAverage, int count, float newValue){
    return currentAverage + (newValue - currentAverage) / count;
}

用法示例:

public static void main(String[] args) {
    float average = 0;
    average = additiveAverage(average, 1, 1);
    average = additiveAverage(average, 2, 2);
    average = additiveAverage(average, 3, 4);
    average = additiveAverage(average, 4, 8);
    average = additiveAverage(average, 5, 16);
    System.out.println(average); //Should give you 6.2
}

加成:

当你了解数组时,这是一个我不介意分享的方法,直接来自我的个人" utils"库:

public static decimal Average(params decimal[] numbers) {
    if (numbers == null) throw new ArgumentNullException(nameof(numbers), "is null.");
    var average = 0m;
    for (var i = 0; i < numbers.Length; i++)
        average += (numbers[i] - average) / (i + 1);
    return average;
}

它在 C#;但它与Java非常相似。

答案 1 :(得分:0)

不使用数组,您仍然可以轻松地使用for循环和方法。

首先,确定您最初想要使用的方法。 使用三种方法,我们可以使用averagre方法,消息方法和main方法。

让我们首先使用averager方法。

解决这个问题的一个好方法是用伪代码编写它,以便更容易地想象你想做什么。我建议让你的averager方法看起来像这样

public static double averager(Scanner input){
    double average;
    int i = 0;
    System.out.println("Enter numbers to be averaged, press c to calculate");
    for (i = 0; i < 100; i++);
    {
        String number = input.nextLine();
        if (number.equalsIgnoreCase(c)
        {
            break;
        }
        else
        {
            average += Integer.parseInt(number);
            i++
        }
    }
    return average / i;

我们将消息计算出来,因此我们知道他们何时想要计算它。 请注意我如何将Scanner作为参数,这使我们可以在以后减少主方法中的代码量。

现在我们还剩2个方法,我们可以创建一个消息方法来返回一个String

public static String message(double average)
{
    return System.out.println("The average of the numbers is " + average");
}

此方法接受我们计算的平均值,然后返回带有信息

的String

最后,我们可以使用我们的主要方法来利用所有方法。

public static void main(String[] args) 
{
    Scanner input = new Scanner(System.in);
    double average = averager(input);
    message(average);
}

请注意,此代码不会检查是否有任何无效输入(输入不是数字) 但是,您可以通过添加一些if条件

轻松完成此操作

答案 2 :(得分:-1)

我知道这不是优化的事情。您可以通过使用字符串生成器从字符串构建数字然后将其解析为int来改进它。

import java.util.Scanner;
    public class Average {
        public static void main(String[] args) {
            String input = getUserInput();
            System.out.print("Average is "+helper(input));

        }
        public static String getUserInput(){
            Scanner scan = new Scanner(System.in);
            System.out.print("Please enter up to ten numbers in one line: ");
            return scan.nextLine();
        }

        public static double helper(String numListStr){
            int sum=0;
            String numberStr="";
            numListStr+=" ;";
            int i=0;
            int numbers=0;
            while(numListStr.charAt(i)!=';') {
                if(numListStr.charAt(i)!=' '){
                    numberStr+= numListStr.charAt(i);
                }

                else{
                    sum+= Integer.parseInt(numberStr);
                    numberStr="";
                    numbers++;
                }
                i++;
            }
            return computeAverage(sum,numbers);
        }
        public static double computeAverage(int sum,int numLength){
            return sum/numLength;
        }
    }