迭代和扫描未按预期工作

时间:2018-09-01 09:24:40

标签: java

我正在尝试制作一个解决“ Sokoban”游戏的程序,所以我目前正在试图做的是读取一个文本文件,创建一个2D数组,并将每个单个字符放入该2d中。 -array(包括空格)。这就是我现在正在处理的内容,当前的文本文件如下所示:

########
#   # .#
#   $$.#
####   #
   #@ ##
   ####

我的代码当前如下所示:

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 个答案:

答案 0 :(得分:1)

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

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);

    }
}

答案 1 :(得分:0)

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

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