当我尝试编写以下代码时,计算机需要多个输入。但我想要的是它应该只需要一行作为输入并保存数组中该行的所有整数。你能帮我解决这个问题吗?
import java.util.*;
class InputInteger{
public static void main(String args[]){
Scanner input=new Scanner(System.in);
int[] array=new int[20];
int i=0;
while(input.hasNext()){
array[i]=input.nextInt();
i++;
}
input.close();
}
}
答案 0 :(得分:2)
但我想要的是它只需要一行作为输入并保存数组中该行的所有整数。
首先,我强烈建议您不要close()
围绕Scanner
创建System.in
close()
。这是一个全局性的,int
可以在以后引起各种问题(因为你无法重新打开它)。至于读取单行输入并将public static void main(String[] args) {
Scanner input = new Scanner(System.in);
if (input.hasNextLine()) {
String line = input.nextLine();
String[] arr = line.split("\\s+");
int[] vals = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
vals[i] = Integer.parseInt(arr[i]);
}
System.out.println(Arrays.toString(vals));
}
}
值拆分为数组,您可以使用Scanner.nextLine()
之类的
String line = "1 31 41 51";
String[] arr = line.split("\\s+");
int[] vals = new int[arr.length];
for (int i = 0; i < arr.length; i++) {
vals[i] = Integer.parseInt(arr[i]);
}
System.out.println(Arrays.toString(vals));
修改根据您的评论,
[1, 31, 41, 51]
输出
List
如果您需要处理错误,我建议您使用List<Integer> al = new ArrayList<>();
for (int i = 0; i < arr.length; i++) {
try {
al.add(Integer.parseInt(arr[i]));
} catch (NumberFormatException nfe) {
}
}
// You could now print the List
System.out.println(al);
// And if you must have an `int[]` copy it like.
int[] vals = new int[al.size()];
for (int i = 0; i < al.size(); i++) {
vals[i] = al.get(i);
}
System.out.println(Arrays.toString(vals));
之类的
{{1}}
答案 1 :(得分:1)
您可以将输入捕获为String
并使用for
循环来处理它:
Scanner input=new Scanner(System.in);
int[] array=new int[20];
String numbers = input.nextLine();
for(int i = 0 ; i<numbers.length() ; i++){
array[i]=Character.getNumericValue(numbers.charAt(i));
}
但在这种情况下,位数必须不超过数组大小,即20。否则它会抛出ArrayIndexOutOfBound
异常。您可能希望对此进行异常处理。
或者为了避免这种情况,您可以声明大小等于输入长度的数组:
int[] array=new int[numbers.length()];
答案 2 :(得分:0)
Scanner input = new Scanner(System.in);
ArrayList<Integer> nums = new ArrayList<Integer>();
boolean repeat = true;
while (repeat) {
System.out
.print("Enter a bunch of integers seperated by spaces, or 'q' to quit: ");
String line = input.nextLine();
if (line.equals("q"))
repeat = false;
else {
String[] numbers = line.split("\\s+");
for (String num : numbers) {
if (!nums.contains(num))
nums.add(Integer.parseInt(num));
}
}
}
for (Integer i : nums) {
System.out.println(i);
}
input.close();