迭代和扫描未按预期工作

我正在尝试制作一个解决“推箱子”游戏的程序,所以我目前要做的是读取文本文件,创建一个二维数组,将每个字符放入该二维数组(包括空格)。这就是我现在正在做的事情,我的文本文件目前看起来像:


########

#   # .#

#   $$.#

####   #

   #@ ##

   ####

我的代码目前如下所示:


package soko;


import java.util.*;



import java.io.*;


public class Dowork {

    File file;

    Scanner sc;

    char a;

    static int lines;

    Scanner lineScanner;

    static int maxChar;

    ArrayList array;

    char[][] array2;

    Scanner bc;

    int n;

    int m;



    public Dowork() throws Exception{

        int n=0;

        int m=0;

        file = new File("C:/Users/joaki/Desktop/sokoban/readin.txt");

        sc = new Scanner(file);

        sc.reset();

        sc.useDelimiter("s*");

        ArrayList<Character> array = new ArrayList<Character>();

        while(sc.hasNext()) {

            String line = sc.next();

            maxChar = line.length();

            if(maxChar < line.length()) {

                maxChar = line.length();

            }

            for (char ch:line.toCharArray()) {

                array.add(ch);

            }

            if(sc.hasNextLine()) {

                lines++;

            }

        }

        sc.close();

        array2 = new char[lines][maxChar];

        Iterator<Character> itemIterator = array.iterator();

            while(itemIterator.hasNext()) {

                itemIterator.next();

                for (int q = 0; q < lines; q++) {

                    for(int r = 0; r < maxChar; r++) {

                        Character j = itemIterator.next();

                        array2[q][r] = itemIterator.next();


                    }

                }


            }

            for (int q = 0; q < lines; q++) {

                for(int r = 0; r < maxChar; r++) {

                    System.out.println(array2[q][r]);

                }

            }



        }



    public static void main(String[] args) throws Exception{

        Dowork g = new Dowork();

    }

}

另一方面,我的第一个输入是:


#

#

#

#

#

#

#


.

.

.

显然应该有 9 # 但我只得到 7,我怀疑我的 itemIterator 有问题,但我不能说。有任何想法吗?


斯蒂芬大帝
浏览 130回答 2
2回答

临摹微笑

在我看来,您在某些事情上做得太过分了。假设您知道如何读取文件。为了简化一些事情,我跳过了实际阅读.txt. 相反,我宣布String像你的例子。然后,我逐行读取字符串并将该字符串存储在 2D 中List。我希望代码是不言自明的,并且易于将结果转换为二维数组(如果必须的话)。public class Answer1 {&nbsp; &nbsp; static final String input =&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "########\n" +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "#&nbsp; &nbsp;# .#\n" +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "#&nbsp; &nbsp;$$.#\n" +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "####&nbsp; &nbsp;#\n" +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "&nbsp; &nbsp;#@ ##\n" +&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; "&nbsp; &nbsp;####";&nbsp; &nbsp; public static void main(String[] args) {&nbsp; &nbsp; &nbsp; &nbsp; List<List<String>> grid = new ArrayList<>();&nbsp; &nbsp; &nbsp; &nbsp; for(String line: input.split("\n")){&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; List<String> row = new ArrayList<>();&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; row.add(line);&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; grid.add(row);&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; //test&nbsp; &nbsp; &nbsp; &nbsp; System.out.println(grid);&nbsp; &nbsp; }}

收到一只叮咚

就在String line = sc.next();you have 之后maxChar = line.length();,这意味着if(maxChar < line.length())紧接其后的条件永远不会满足。在while(sc.hasNext())块的末尾,变量maxChar将只包含最后一行的长度,实际上似乎是 7。顺便说一句,我认为您希望条件为if(maxChar > line.length()),如果您的意图是(正如我怀疑的那样)maxChar在您的拼图文件中包含一行的最大长度。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java