gpt4 book ai didi

java - 如何使用 .nextInt .hasNextInt 或 .hasNext 读取在单行中输入的整数而不会造成阻塞?

转载 作者:行者123 更新时间:2023-12-01 12:16:46 26 4
gpt4 key购买 nike

我正在尝试读取在一行中用空格分隔的一个接一个输入的整数。有某种方法可以让这段代码在不使用 .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 的许多回复,但似乎都不起作用。

最佳答案

问题是 System.in 是一个无限流。如果扫描器在已读取的内容中未找到 token ,则调用 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));
}

关于java - 如何使用 .nextInt .hasNextInt 或 .hasNext 读取在单行中输入的整数而不会造成阻塞?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26951134/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com