Java制作数字文件的二维列表对象

我在一个文件中有一个数字金字塔

  • 1

  • 2 3

    • 3 4 5

我试图用文件中的数字填充 2D Arraylist。我试图先填充一行数字,然后将该行添加到一列,但我找不到正确的输入测试来完成这项工作。

ArrayList<Integer> rows = new ArrayList<Integer>(); 

ArrayList<ArrayList<Integer>> columns = new ArrayList<ArrayList<Integer>>(); 

    try {

        Scanner s = new Scanner(new File("1.txt"));

        //while (s.hasNext()) {

            String a = s.next();

            String b = s.next();

            s.nextLine();


            while(s.hasNextLine()) {

                while(s.hasNextInt() ) { 

                // I want to say while( has more lines is true )

                // ( create a row of ints and append it to columns

                    rows.add(s.nextInt());


                    }   

                columns.add(rows);

                rows.clear();

            }   


    catch (FileNotFoundException e) {

        e.printStackTrace();

    }

编辑:我添加的最后一行是 [1, 2, 3, 3, 4, 5] 而不是 [3, 4, 5] 因为 s.hasNextInt() 在迭代时始终为真,所以 while(in.hasNextLine ()) 只运行一次


慕村225694
浏览 68回答 2
2回答

慕桂英3389331

快速浏览一下,我会说这里的这一行是你的问题:rows.clear();你的rows变量仍然指向它在你添加它之前指向的同一个列表,columns所以如果你清除它,那么你所做的就是将一个空添加ArrayList到columns.替换这一行:rows.clear();有了这个:rows&nbsp;=&nbsp;new&nbsp;ArrayList<>();这样,rows变量仍然指向一个空的、全新的ArrayList,但它ArrayList之前指向的变量是独立的。

12345678_0001

一种简单的方法是hasNextLine()用 anextLine()和字符串拆分替换循环。所以你会用nextLine()ArrayList<Integer> row;ArrayList<ArrayList<Integer>> columns = new ArrayList<ArrayList<Integer>>();&nbsp;try {&nbsp; &nbsp; Scanner s = new Scanner(new File("1.txt"));&nbsp; &nbsp; while (s.hasNextLine()) {&nbsp; &nbsp; &nbsp; &nbsp; String[] temp = s.nextLine().split(" ");&nbsp; &nbsp; &nbsp; &nbsp; row = new ArrayList<Integer>();&nbsp; &nbsp; &nbsp; &nbsp; for(String i : temp) ints.add(Integer.parseInt(i));&nbsp; &nbsp; &nbsp; &nbsp; columns.add(row);&nbsp; &nbsp; }}catch (FileNotFoundException e) {&nbsp; &nbsp; e.printStackTrace();}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java