如何从Scanner中获取多个浮点数并将它们分别存储在Java中?

时间:2017-03-20 09:10:22

标签: java arrays floating-point average

我正在编写一个程序,该程序应该从用户输入中获取五倍并返回它们的平均值。

我希望程序能够输入像

这样的输入
5.0 8.0 5.0 7.0 5.0

并返回

6.0

这是我的代码:

import java.util.Scanner;

public class findAverage {
public static void main(String[] args){
    Scanner keyboard = new Scanner(System.in);

    // Initialise the array
    float[] numberArray;
    float total = 0;

    // Allocate memory for 5 floats
    numberArray = new float[5];

    for(int i = 0; i < 5; i++){
        numberArray[i] = keyboard.nextInt();
        total += numberArray[i];
    }

    // Find the average
    float average = total / 5;
    System.out.println(average);
    }
}

现在,该代码将用户输入5个单独的时间并计算平均值。如何制作它以便用户可以在同一行输入5个浮点数并让程序找到平均值?

2 个答案:

答案 0 :(得分:1)

使用扫描仪无法做到这一点,但是......

你可以这样做:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class Avg {

    public static void main(String[] args) throws IOException {
        BufferedReader keyboard = new BufferedReader(new InputStreamReader(System.in));
        float total = 0;
        String line = keyboard.readLine();
        String[] data = line.split("\\s");
        for (int i = 0; i < data.length; i++) {   
            total += Float.parseFloat(data[i]);
        }

        // Find the average
        float average = total / data.length;
        System.out.println(average);
    }
}

它将读取在一行中输入的所有浮点数并在您点击&#34;输入&#34;时打印平均值。

答案 1 :(得分:0)

如果您希望能够获取任意数量(N)的参数并计算没有O(N)内存复杂度的平均值,则可以使用以下内容。

只需确保在参数列表的末尾传递非数字,例如&#39; a&#39;或扫描仪不会忽略的任何其他内容。

public static void main(String[] args)
{

    Scanner keyboard = new Scanner(System.in);

    double avg = 0.0;
    for (int i = 1; ;i++)
    {
        if (!keyboard.hasNextDouble()) break;
        double next = keyboard.nextDouble();
        avg = (avg * (i - 1) + next) / i;
    }
    System.out.println(avg);
}