我有n行数字,所有包含相同数字的数字可以说m,如何将它们存储在2d数组中
1 5 7 9
2 3 4 6
3 4 5 8
请注意,此处未给出n和m的值。
BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
Scanner sc=new Scanner(System.in);
while(sc.hasNextLine())
{
String line=br.readLine();
String [] str =line.trim().split(" ");
int n=str.length;
columns=n;
for(int i=0;i<n;i++)
{
matrix[rows][i]=Integer.parseInt(str[i]);
}
rows++;
}
运行时错误即将来临 运行时错误时间:0.14内存:321088信号:-1
答案 0 :(得分:2)
您可以暂时将所有内容存储到ArrayList
中,然后在最后迭代它并创建2D数组:
BufferedReader br = new BufferedReader("C:/YourFile.txt");
ArrayList<Integer> list = new ArrayList<Integer>();
int rows=0, cols=0;
String line;
while ((line = br.readLine()) != null) {
String [] str = line.trim().split(" ");
int n = str.length;
cols = n;
for (int i=0; i < n; ++i) {
list.add(Integer.parseInt(str[i]));
}
++rows;
}
// now create a 2D array and store everything into it
int[][] array = new array[rows][cols];
for (int i=0; i < rows; ++i) {
for (int j=0; j < cols; ++j) {
array[i][j] = list.get(i*cols+j);
}
}
答案 1 :(得分:1)
试试这个:
List<List<Integer>> ints = new ArrayList<>();
String d = "1 5 7 9 \n"
+ "2 3 4 6 \n"
+ "3 4 5 8 ";
for (String line : d.split("\n")) {
List<Integer> row = new ArrayList<>();
for (String cell : line.split(" ")) {
row.add(Integer.parseInt(cell));
}
ints.add(row);
}
System.out.println(ints);
输出:
[[1, 5, 7, 9], [2, 3, 4, 6], [3, 4, 5, 8]]
答案 2 :(得分:1)
不确定,但我认为在两个对象(System.in
和Scanner
)中使用InputStreamReader
会导致问题,因为在读取器读取之前,扫描程序可能会使用字符。< / p>
如果你离开扫描仪,只是在你的while条件下使用BufferedReader.ready()
,它可以工作(几乎相同的代码):
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(br.ready())
{
String line=br.readLine();
String [] str =line.trim().split(" ");
int n=str.length;
columns=n;
for(int i=0;i<n;i++)
{
matrix[rows][i]=Integer.parseInt(str[i]);
}
rows++;
}