我正在尝试制作一个解决“ 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出了点问题,但我无法告知。有任何想法吗?
答案 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>