Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Scanner中获取多个float并将它们分别存储在Java中?_Java_Arrays_Floating Point_Average - Fatal编程技术网

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

如何从Scanner中获取多个float并将它们分别存储在Java中?,java,arrays,floating-point,average,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

我正在写一个程序,它应该从用户输入中提取五个双倍,然后返回它们的平均值

我想让程序接受这样的输入

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);
    }
}
import java.util.Scanner;
公共类findAverage{
公共静态void main(字符串[]args){
扫描仪键盘=新扫描仪(System.in);
//初始化数组
浮动[]数字射线;
浮动总数=0;
//为5个浮点数分配内存
numberArray=新浮点[5];
对于(int i=0;i<5;i++){
numberArray[i]=keyboard.nextInt();
总数+=数字射线[i];
}
//求平均数
浮动平均值=总计/5;
系统输出打印项次(平均值);
}
}

现在,该代码需要用户分别输入5次并计算平均值。如何使用户可以在同一行上输入5个浮点数,并让程序找到平均值?

使用扫描仪是不可能的,但是

您可以这样做:

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);
    }
}
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
公共类平均值{
公共静态void main(字符串[]args)引发IOException{
BufferedReader键盘=新的BufferedReader(新的InputStreamReader(System.in));
浮动总数=0;
字符串行=键盘.readLine();
String[]data=line.split(\\s”);
对于(int i=0;i

它将读取在一行中输入的所有浮点值,并在您点击“回车”时打印平均值。

如果您希望能够获取任意数量(N)的参数并计算平均值,而不需要O(N)个内存复杂性,您可以使用以下方法

只需确保在参数列表的末尾传递一个非数字,如“a”或其他扫描器不会忽略以使其停止的内容

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

您可以在同一行中输入它们。之后只需按enter键,Java将立即处理所有结果。此外,您正在调用
nextInt
,同时将结果存储在类型为
float
的数组中。不管怎么说,看起来你根本不需要数组。如何判断何时有行尾,因为当你按enter键时,这段代码不会计算任何内容。我告诉过你了。在末尾加一个非数字。比如说1234AOK,但是如果那样的话。。。你不使用异常来编程逻辑吗?我知道它在某种程度上是有效的,但是异常并不是为了控制正常的逻辑流。如果你传递一个非double,扫描器就会抛出异常。这是一种可能的方法,以摆脱循环有一个班轮。一种可能的方式,你可以找到一个你更喜欢的。至于控制正常流量的例外情况,在大多数情况下可能是正确的。一些编程语言采用另一种方法(例如Python及其迭代器)。我给了你一些有效的法律规范。不将数字存储在数组中的想法是有益的