Java 如何通过按enter键退出while循环?

Java 如何通过按enter键退出while循环?,java,input,enter,Java,Input,Enter,我试图通过按键盘上的Enter键来打破while循环。我的代码是: package javaapplication4; import java.util.ArrayList; import java.util.Scanner; public class JavaApplication4 { public static void main(String[] args) { Scanner keyboard = new Scanner(System.in);

我试图通过按键盘上的Enter键来打破while循环。我的代码是:

package javaapplication4;
import java.util.ArrayList;
import java.util.Scanner;

public class JavaApplication4 {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        ArrayList<Double> numbers = new ArrayList( );
        while (true) {
            System.out.println("Please enter the numbers seperated by a space: ");
            numbers.add(keyboard.nextDouble());
           //want the while loop to break here by pressing "enter" after entering array values
        }
        System.out.println(numbers);
    }
包javaapplication4;
导入java.util.ArrayList;
导入java.util.Scanner;
公共类JavaApplication4{
公共静态void main(字符串[]args){
扫描仪键盘=新扫描仪(System.in);
ArrayList编号=新的ArrayList();
while(true){
System.out.println(“请输入空格分隔的数字:”);
添加(keyboard.nextDouble());
//希望在输入数组值后按“enter”键在此处中断while循环吗
}
系统输出打印项次(数字);
}

不要使用循环来获取输入,或
nextDouble
。您真正想要的是一行输入,然后将其拆分为一个双倍列表。因此,请使用
nextLine
,将其拆分,并解析每个项。类似以下内容:

Scanner keyboard = new Scanner(System.in);
ArrayList<Double> numbers = new ArrayList( );
String input = keyboard.nextLine();
for(String item : input.split(" ")){
    numbers.add(Double.parseDouble(item));
}
扫描仪键盘=新扫描仪(System.in);
ArrayList编号=新的ArrayList();
字符串输入=键盘.nextLine();
for(字符串项:input.split(“”){
添加(Double.parseDouble(item));
}
这忽略了任何类型的输入验证,但它显示了一种通用方法


这将起作用,因为一旦你点击“回车”,它结束于第一行,这意味着扫描器可以通过
下一行进入大部分代码。由于您不再尝试读取任何内容,因此它不会阻止等待更多输入,并且可以在完成后成功退出。

不要使用循环获取输入,或
下一行双倍。您真正想要的是一行输入输入,然后将其拆分为一个双精度列表。因此,请使用
nextLine
,将其拆分,然后解析每个项目。类似以下内容:

Scanner keyboard = new Scanner(System.in);
ArrayList<Double> numbers = new ArrayList( );
String input = keyboard.nextLine();
for(String item : input.split(" ")){
    numbers.add(Double.parseDouble(item));
}
扫描仪键盘=新扫描仪(System.in);
ArrayList编号=新的ArrayList();
字符串输入=键盘.nextLine();
for(字符串项:input.split(“”){
添加(Double.parseDouble(item));
}
这忽略了任何类型的输入验证,但它显示了一种通用方法


这将起作用,因为一旦你点击“回车”,它将结束第一行,这意味着扫描器可以通过
下一行进入你的大部分代码。因为你不再尝试读取任何内容,它不会阻止等待更多的输入,并且可以在完成后成功退出。

我自己喜欢使用try{…}catch(NumberFormatException)因此,当您得到一个空行(即输入)时,您的catch块将被激活,您已跳出循环

try {
    while (true) {
      System.out.println("Please enter the numbers seperated by a space: ");
      numbers.add(keyboard.nextDouble());
      //want the while loop to break here by pressing "enter" after entering array values
    }
} catch (NumberFormatException ex) {}
System.out.println(numbers);

我自己喜欢使用try{…}catch(NumberFormatException),这样当你得到一个空行(即输入)时,你的catch块就被激活了,你就逃出了循环

try {
    while (true) {
      System.out.println("Please enter the numbers seperated by a space: ");
      numbers.add(keyboard.nextDouble());
      //want the while loop to break here by pressing "enter" after entering array values
    }
} catch (NumberFormatException ex) {}
System.out.println(numbers);
import java.util.ArrayList;
导入java.util.Scanner;
导入java.util.StringTokenizer;
公共类JavaApplication4{
公共静态void main(字符串[]args){
扫描仪键盘=新扫描仪(System.in);
ArrayList编号=新的ArrayList();
System.out.println(“请输入空格分隔的数字:”);
字符串行=keyboard.nextLine();
StringTokenizer令牌=新的StringTokenizer(行“”);
while(token.hasMoreTokens()){
add(Double.parseDouble(token.nextToken());
}
System.out.println(“数字:”+数字);
}
}

导入java.util.ArrayList;
导入java.util.Scanner;
导入java.util.StringTokenizer;
公共类JavaApplication4{
公共静态void main(字符串[]args){
扫描仪键盘=新扫描仪(System.in);
ArrayList编号=新的ArrayList();
System.out.println(“请输入空格分隔的数字:”);
字符串行=keyboard.nextLine();
StringTokenizer令牌=新的StringTokenizer(行“”);
while(token.hasMoreTokens()){
add(Double.parseDouble(token.nextToken());
}
System.out.println(“数字:”+数字);
}

}

这似乎一直在等待您输入一个双精度值,而不管您按enter键多少次。它只是忽略了换行符。(此外,我认为应该是
InputMismatchException
,而不是
NumberFormatException
)。@resueman“无论按多少次enter键,这似乎都在等待您输入一个double。”因为
keyboard.nextDouble()
在输入令牌之前都不会开始读取。而且“return”不是有效的令牌(使用默认分隔符)。这似乎一直在等待您输入一个双精度字符,而不管您按enter键多少次。它只是忽略了换行符。(此外,我认为应该是
InputMismatchException
,而不是
NumberFormatException
)。@resueman”这似乎只是在等待您输入一个double,而不管您按了多少次enter。“因为
keyboard.nextDouble()
在输入令牌之前都不会开始读取。而且“return”不是一个有效的令牌(带有默认分隔符)。只需注意:
double.parseDouble(输入)
将尝试分析空行,这显然失败。编辑:您的编辑无法修复此问题:P@Tom我没有看到它尝试解析空行。对于我机器上的
12345
输入,输出是
[1.0,2.0,3.0,4.0,5.0]
。请用空行尝试:).我知道你说过,你忽略了检查,这就是为什么我的推荐应该是一个“注释”,而不是一个评论。只是一个注释:
Double.parseDouble(输入)
将尝试分析空行,这显然失败。编辑:您的编辑无法修复此问题:P@Tom我没有看到它试图解析空行。对于我机器上的
12345
输入,输出是
[1.0,2.0,3.0,4.0,5.0]
。用空行试试:)。我知道你说过,你忽略了检查,这就是为什么我的推荐是一个“注释”,而不是一个评论。尽管
StringTokenizer
仍然有效,但它是一个