如何将未知数量的空格分隔整数作为输入,直到用户按下java中的输入并将每行的输入存储在单独的数组中。
例如:如果我有以下行作为输入,
1 2 3 4 5
2 4 6 8 10
然后一个数组存储第一行(比方说)arr1 = {1,2,3,4,5} 并且下一个数组存储第二行(比如)arr2 = {2,4,6,8,10}
我尝试使用scanner类来获取空格分隔的整数输入,但在遇到新行时无法切换到下一个数组。
答案 0 :(得分:1)
我会做这样的事情:
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
List<Integer[]> l = new ArrayList<Integer[]>();
Scanner s = new Scanner(System.in);
System.out.println("How many rows will you enter?");
int numOfRows = s.nextInt();
for (int i = 0; i < numOfRows; i++) {
String[] arr = s.nextLine().split(" ");
Integer[] arr2 = new Integer[arr.length];
for (int j = 0; j < arr.length; j++) {
arr2[j] = Integer.parseInt(arr[j]);
}
l.add(arr2);
}
s.close();
//Do whatever you want with l
}
}
答案 1 :(得分:0)
首先,对于每行未知数量的整数,我建议使用较小的数据结构,可能是列表。
其次,如果你想读取行(使用它的方法readLine),BufferedReader似乎是更好的选择。读取一行后,您可以使用string.split(“”)来获取整数。
答案 2 :(得分:0)
获取输入直到空行,然后使用空格作为分隔符将行转到String
数组。然后将每个元素解析为int
并将其放入临时ArrayList<Integer>
。 ArrayList<Integer>
中已解析的整数将放在主ArrayList
内。
ArrayList
的结构将是ArrayList
ArrayList<Integer>
import java.util.*;
public class MultiLine {
public static void main (String[] args) {
Scanner sc = new Scanner( System.in );
System.out.println("Input:");
// main ArrayList
ArrayList < ArrayList<Integer> > lst = new ArrayList < ArrayList<Integer> >();
// input process
while ( sc.hasNextLine() ) {
String line = sc.nextLine();
// stops input if line is empty
if ( line.equals("") )
break;
// splits line to String array, using space as delimiter
String[] splittedLine = line.split(" ");
// temporary ArrayList that will parse each number from lines seperated by space
ArrayList <Integer> temp = new ArrayList <Integer>();
// parses each String of splittedLine to int, adds it to temp ArrayList
for( String num : splittedLine ) {
try {
temp.add( Integer.parseInt(num) );
} catch (NumberFormatException e) {
e.printStackTrace();
}
}
// adds temp ArrayList to lst
lst.add( temp );
}
System.out.println( lst );
}
}
示例运行
Input:
1 2 3 4 5
2 4 6 8 10
12 14
895 623 1245 1
[[1, 2, 3, 4, 5], [2, 4, 6, 8, 10], [12, 14], [895, 623, 1245, 1]]