我正在尝试在表示地图的字符数组中读取名为input.的文本文件。该文件包含两个整数N和numLifes,以及相应的矩阵。 N表示方阵(NxN)的维数。
我希望如果N小于10,则赋值变量N,值为10并用'#'填充矩阵'mVill',然后读取映射文件并将其与填充的矩阵集成'#'。下面是代码:
import java.io.*;
import java.io.FileReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class hola {
public static void main(String[] args) {
char mVill[][] = null;
int N, i,j, numLifes;
String line=null;
StringTokenizer tk;
char caract;
FileInputStream fstream = null;
try {
fstream = new FileInputStream("C:/input.in");
} catch (FileNotFoundException e) {
System.exit(-1);
}
DataInputStream in = new DataInputStream(fstream);
BufferedReader br = new BufferedReader(new InputStreamReader(in));
try {
if ((line = br.readLine()) == null) {
System.out.print("Error empty file...");
System.exit(0);
}
} catch (IOException e) {
}
tk = new StringTokenizer(line);
N = Integer.parseInt(tk.nextToken());
numLifes = Integer.parseInt(tk.nextToken());
int nAux=N;
if (N<10){
N=10;
mVill = new char[N][N];
for (char[] row: mVill)
Arrays.fill(row, '#');
for (i=0; i <nAux; i++) {
for (j=0;j<nAux;j++){
try{
caract = (char) br.read();
mVill[i][j]=caract;
}catch (Exception e){
System.out.println("Error in read file");
}
}
}
}else{
mVill = new char[N][N];
for (i = 0; i < N; i++) {
try {
mVill[i] = br.readLine().toCharArray();
} catch (IOException e) {
// TODO Auto-generated catch block
}
}
}
System.out.println(N+" "+numLifes);
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
System.out.print(mVill[i][j]);
}
System.out.println();
}
}//end main
}//end class
对于此输入:
7 3
F..*..F
.##.##.
.#...#.
*..P..*
.#...#.
.##.##.
F..*..F
输出是(这是错误的):
F..*..F###
.##.####
#.
.#.###
..#.
*###
..P..*
###
.#...####
.
.##.###
##########
##########
##########
我应该期望得到它的输出:
F..*..F###
.##.##.###
.#...#.###
*..P..*###
.#...#.###
.##.##.###
F..*..F###
##########
##########
##########
我做错了什么?我在阅读文件时没有看到任何错误。
答案 0 :(得分:1)
按照史蒂夫的回答,纠正它的快速而肮脏的方法是在你阅读你的角色时这样做:
caract = (char) br.read();
while (caract == '\n' || caract == '\r') {
caract = (char) br.read();
}
mVill[i][j]=caract;
因此将跳过换行符和回车符。
答案 1 :(得分:0)
我认为您在阅读输入时并未考虑回车符/换行符。我可能会使用一种不同的技术,你一次只读一行而不是一个字符。
尝试测试角色以查看它是否为cr / lf并跳过它,如果是这样。