在java中,如何在不知道大小的情况下读取浮点输入?

在java中,如何在不知道大小的情况下读取浮点输入?,java,arrays,input,java.util.scanner,Java,Arrays,Input,Java.util.scanner,样本输入: 9.1 9.0 8.9 8.8 9.4 7.9 8.6 9.8 这是我获取输入的代码 如果不知道输入的数量,我不知道如何获得这种类型的输入 import java.io.*; 导入java.util.*; /** *跳水比赛 */ 公开课跳水比赛{ 公共静态void main(字符串[]args)引发IOException{ 扫描仪输入=新扫描仪(系统输入); ArrayList lst=新的ArrayList(); while(在.hasNextFloat()中){ lst.ad

样本输入:

9.1 9.0 8.9 8.8 9.4 7.9 8.6 9.8
这是我获取输入的代码

如果不知道输入的数量,我不知道如何获得这种类型的输入

import java.io.*;
导入java.util.*;
/**
*跳水比赛
*/
公开课跳水比赛{
公共静态void main(字符串[]args)引发IOException{
扫描仪输入=新扫描仪(系统输入);
ArrayList lst=新的ArrayList();
while(在.hasNextFloat()中){
lst.add(in.nextFloat());
}
系统输出打印(lst);
in.close();
}
}
这个循环运行无限时间。如何在不知道输入行大小的情况下获取输入


我来自python背景

一点也没有java,但我认为这是可行的。我读了整行,把它们分开

import java.io.*;
import java.util.*;

/**
 * Diving_Competition
 */
public class read {
    public static void main(String[] args) throws IOException{
        Scanner in = new Scanner(System.in);
        String string = in.nextLine();
        String[] stringLst = string.split(" ");
        ArrayList<Float> numLst = new ArrayList<Float>();
        
        for (String num : stringLst) {
            numLst.add(Float.parseFloat(num));
        }
        
        System.out.print(numLst);
    
        in.close();
    }
}
import java.io.*;
导入java.util.*;
/**
*跳水比赛
*/
公开课阅读{
公共静态void main(字符串[]args)引发IOException{
扫描仪输入=新扫描仪(系统输入);
String String=in.nextLine();
String[]stringLst=String.split(“”);
ArrayList numLst=新的ArrayList();
用于(字符串编号:stringLst){
numLst.add(Float.parseFloat(num));
}
系统输出打印(numLst);
in.close();
}
}

只要有数字输入,代码就不会在循环时退出
,因为.hasNextFloat()
中的条件已满足


假设您正在终端中输入样本:要退出循环,只需输入任何非数值,如
a
,或输入EOF命令。在Unix中这是Ctrl+D,在Windows中是Ctrl+Z(不确定Windows命令)

解决此类问题的最佳方法是通过调试器或使用控制台打印有用的信息。您的程序非常好,它挂起是因为它需要输入一个输入(除非您想将输入扫描为程序参数,否则这是另一个问题)

在这里,我对您的程序做了一个简单的更改

publicstaticvoidmain(字符串[]args)引发IOException{
扫描仪输入=新扫描仪(系统输入);
ArrayList lst=新的ArrayList();
while(在.hasNextFloat()中){
float x=in.nextFloat();
System.out.println(“输入的编号:+x”);
第1条添加(x);
}
系统输出打印(lst);
in.close();
}
这里是控制台输出

2.3
输入号码:2.3
重新
[2.3]
注意如何结束输入,我必须输入非浮点数字母。如果我没有输入,程序将继续从控制台一个接一个地获取输入


也就是说,从您的问题来看,您似乎希望从控制台获得一行浮点输入。如果是这种情况,那么您应该逐行读取并基于“空格”字符对其进行解析。

9.19.0 8.9 8.8 9.4 7.9 8.6 9.8线程“main”中的异常java.lang.NumberFormatException:java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)在Diving_Competition.main(Diving_Competition.java:15)的java.base/jdk.internal.math.FloatingDecimal.parseFloat(FloatingDecimal.java:122)和java.base/java.lang.Float.parseFloat(Float.java:461)中,我得到了类似空字符串的异常,因为这段代码比您已经发布的代码更糟糕。它假定每个令牌都是实数,并且仅将其用于处理行而浪费了
扫描仪。不要使用。任何人都可以更正并发送它。我是Java新手Begginer@CalebSadler实用程序不会在意外情况下抛出异常。这是没有争议的。这个循环不会“运行无限时间”。它将在
hasNextFloat()
返回false时立即停止,如果不是在输入中出现其他内容之前,它肯定会在输入结束时停止。这里没有需要解决的问题。线程“main”java.lang.NumberFormatException中的异常:java.base/jdk.internal.math.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)java.base/jdk.internal.math.FloatingDecimal.parseFloat(FloatingDecimal.java:122)中的空字符串(Float.java:461)在Diving_Competition.main(Diving_Competition.java:15)上,这更证明了循环不会无限期运行。如果这是你真正的问题,你应该问它。但是这段代码不会调用
parseFloat()
,也不会抛出此异常。