我最近选择了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() 作为条件,但这没有帮助。
如果有人知道如何解决这个问题,我会非常感激。
答案 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());