为了账号安全,请及时绑定邮箱和手机立即绑定

迭代和扫描未按预期工作

迭代和扫描未按预期工作

斯蒂芬大帝 2021-08-25 15:10:49
我正在尝试制作一个解决“推箱子”游戏的程序,所以我目前要做的是读取文本文件,创建一个二维数组,将每个字符放入该二维数组(包括空格)。这就是我现在正在做的事情,我的文本文件目前看起来像:#########   # .##   $$.#####   #   #@ ##   ####我的代码目前如下所示: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 有问题,但我不能说。有任何想法吗?
查看完整描述

2 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

在我看来,您在某些事情上做得太过分了。假设您知道如何读取文件。为了简化一些事情,我跳过了实际阅读.txt. 相反,我宣布String像你的例子。然后,我逐行读取字符串并将该字符串存储在 2D 中List。我希望代码是不言自明的,并且易于将结果转换为二维数组(如果必须的话)。


public class Answer1 {


    static final String input =

            "########\n" +

            "#   # .#\n" +

            "#   $$.#\n" +

            "####   #\n" +

            "   #@ ##\n" +

            "   ####";



    public static void main(String[] args) {


        List<List<String>> grid = new ArrayList<>();

        for(String line: input.split("\n")){

            List<String> row = new ArrayList<>();

            row.add(line);

            grid.add(row);

        }


        //test

        System.out.println(grid);


    }

}


查看完整回答
反对 回复 2021-08-25
?
收到一只叮咚

TA贡献1821条经验 获得超4个赞

就在String line = sc.next();you have 之后maxChar = line.length();,这意味着if(maxChar < line.length())紧接其后的条件永远不会满足。在while(sc.hasNext())块的末尾,变量maxChar将只包含最后一行的长度,实际上似乎是 7。

顺便说一句,我认为您希望条件为if(maxChar > line.length()),如果您的意图是(正如我怀疑的那样)maxChar在您的拼图文件中包含一行的最大长度。


查看完整回答
反对 回复 2021-08-25
  • 2 回答
  • 0 关注
  • 129 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信