Java:从控制台只获取1行整数?

时间:2016-03-20 12:32:40

标签: java input console newline

我最近选择了Java,我遇到了一些控制台输入问题。

基本上,我想以如下格式从控制台读取一组int:

1 2 3 4 5 6

我查看了论坛上的一些示例,并决定使用扫描程序 nextInt() 方法执行此操作。

我的代码目前看起来像这样:

Scanner get = new Scanner(System.in);
List<Integer> elements = new ArrayList<>();

while (get.hasNextInt()) {           
        elements.add(get.nextInt());
    }

此代码的问题是当我在控制台上按“Enter”时,while循环不会停止。 这意味着在我输入一些数字(1 3 5 7)然后按回车键后,程序不会继续执行,而是等待更多的整数。它停止的唯一方法是我输入一个字母到控制台。

我尝试在我的while循环中添加 !get.hasNextLine() 作为条件,但这没有帮助。

如果有人知道如何解决这个问题,我会非常感激。

4 个答案:

答案 0 :(得分:2)

如果您想阅读只有一行,最简单的答案可能是最好的:)

Scanner in = new Scanner(System.in); String hString = in.nextLine(); String[] hArray = hString.split(" ");

现在,在数组hArray中,您拥有输入中的所有元素,您可以像hArray [0]

一样调用它们

答案 1 :(得分:1)

您可以阅读一行,然后使用它来构建另一行Scanner。像,

if (get.hasNextLine()) {
    String line = get.nextLine();
    Scanner lineScanner = new Scanner(line);
    while (lineScanner.hasNextInt()) {          
        elements.add(lineScanner.nextInt());
    }
}

Scanner(String)构造函数(根据Javadoc)构造一个新的Scanner,它生成从指定字符串扫描的值。

答案 2 :(得分:0)

Scanner get = new Scanner(System.in);
String arrSt = get.next();
StringTokinizer  stTokens = new StringTokinizer(arrSt," ");
int [] myArr = new Int[stTokens.countTokens()];
int i =0;
while(stTokens.hasMoreTokens()){
    myArr[i++]=Integer.parseInt(stTokens.nextToken());
}

答案 3 :(得分:0)

您可以使用以下内容。用户只需输入每个整数而不按Enter键,然后在最后按Enter键。

Scanner get = new Scanner(System.in);
List<Integer> elements = Stream.of(get.nextLine().split(" "))
                               .map(Integer::parseInt)
                               .collect(Collectors.toList());