我正在尝试在由空格分隔的单行上一个接一个地读取整数。
这段代码可以在不使用.nextLine
的情况下工作,而无需将输入转换为字符串,然后转换为整数?
挑战是“不使用.nextLine”,不要使用字符串或转换。读取纯整数并从while循环退出。
public static void scannerInts (){
int[] list = new int[100];
int n=0;
System.out.print("Input data into one line, [ENTER] to finish: ");
Scanner input = new Scanner(System.in);
while (input.hasNext()) {
if (input.hasNextInt()) {
list[n++]= input.nextInt();
} else {
input.next();
}
}
for (int i=0;i<n;i++)
System.out.print(list[i] + " ");
}
PD:我尝试过Stack OverFlow的许多回复,似乎没什么用。
答案 0 :(得分:1)
问题是System.in
是一个无限的流。调用hasNextXXX
会导致System.in
提示扫描程序是否在已读取的内容中找不到令牌。用户需要输入一些非整数来终止列表。
然而,您可以使用第二个扫描仪,因为扫描仪可以扫描字符串,例如:
Scanner in = new Scanner(System.in);
System.out.print("Enter a list of integers: ");
List<Integer> list = new ArrayList<>();
Scanner line = new Scanner(in.nextLine());
// optional
line.useDelimiter("\\D+");
while(line.hasNextInt()) {
list.add(line.nextInt());
}
System.out.println("You entered " + list);
使用单个扫描仪,您还可以使用findInLine
:
for(String token; (token = in.findInLine("-?[1-9]\\d*")) != null;) {
list.add(Integer.valueOf(token));
}