用户需要输入一定数量的整数。相反,他们一次输入一个整数,我想让它们可以在一行上输入多个整数,然后我希望这些整数在数组中转换。例如,如果用户输入:56 83 12 99
,那么我想要创建一个{56, 83, 12, 99}
在Python或Ruby等其他语言中,我会使用.split(" ")
方法来实现这一目标。据我所知,Java中没有这样的东西存在。关于如何接受用户输入并基于此创建数组的任何建议都在一条线上?
答案 0 :(得分:5)
使用Scanner.nextInt()
方法可以解决问题:
输入:
56 83 12 99
代码:
import java.util.Scanner;
class Example
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int[] numbers = new int[4];
for(int i = 0; i < 4; ++i) {
numbers[i] = sc.nextInt();
}
}
}
@ user1803551关于Scanner.hasNext()
如何实现此目的的请求:
import java.util.*;
class Example2
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
ArrayList<Integer> numbers = new ArrayList<Integer>();
while (sc.hasNextInt()) { // this loop breaks there is no more int input.
numbers.add(sc.nextInt());
}
}
}
答案 1 :(得分:1)
Makoto的回答使用Scanner#nextLine
和String#split
执行您想要的操作。 mauris的答案使用Scanner#nextInt
,如果您愿意更改输入要求,使得最后一个条目不是整数,则有效。我想说明如何让Scanner#nextLine
使用您提供的确切输入条件。虽然不那么实际,但它确实具有教育价值。
public static void main(String[] args) {
// Preparation
List<Integer> numbers = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
System.out.println("Enter numbers:");
// Get the input
while (scanner.hasNextInt())
numbers.add(scanner.nextInt());
// Convert the list to an array and print it
Integer[] input = numbers.toArray(new Integer[0]);
System.out.println(Arrays.toString(input));
}
在第一次提示时给出输入10 11 12
,程序会存储它们(Scanner
有一个private
缓冲区),但后来不断要求更多输入。这可能会让人感到困惑,因为我们给出了循环通过hasNext
的3个整数,并期望当第4次调用时,将没有整数,循环将会中断。
要了解它,我们需要查看文档:
hasNext
和next
方法[及其原始类型的伴随方法] 可以阻止等待进一步输入。hasNext
方法块是否与其关联的next
方法是否会阻止无关。
(强调我的)和hasNextInt
当且仅当此扫描程序的下一个标记是有效的int值时,才返回
true
我们使用scanner
初始化InputStream
,这是连续数据流。在第4次拨打hasNextInt
时,扫描仪&#34; 不知道&#34;如果有一个下一个int或因为流仍处于打开状态且数据预计会到来。从文档中可以得出结论,我们可以说hasNextInt
如果此扫描程序的下一个标记是有效的int值,则返回
true
,如果它不是有效的int,则返回false
,如果它不知道下一个标记是什么,则返回阻止
所以我们需要做的是在获得输入后关闭流:
// Get the input
numbers.add(scanner.nextInt());
System.in.close();
while (scanner.hasNextInt())
numbers.add(scanner.nextInt());
这次我们要求输入,获取所有内容,关闭流以通知scanner
hasNextInt
不需要等待更多输入,并通过迭代存储它。这里唯一的问题是我们已关闭System.in
,但如果我们不需要更多输入就可以了。
答案 2 :(得分:0)
String#split
存在,但你必须做更多的工作,因为你只是回来了。
获得拆分后,将每个元素转换为int
,并将其放入所需的数组中。
final String intLine = input.nextLine();
final String[] splitIntLine = intLine.split(" ");
final int[] arr = new int[splitIntLine.length];
for(int i = 0; i < splitIntLine.length; i++) {
arr[i] = Integer.parseInt(splitIntLine[i]);
}
System.out.println(Arrays.toString(arr)); // prints contents of your array