从多行解析java中的输入

时间:2015-04-15 08:01:29

标签: java

我有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

3 个答案:

答案 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.inScanner)中使用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++;
}

您可能更喜欢Tichodroma's more elegent answer