我正在用Java编写游戏代码。具体来说,我正在使用由.txt文件中的字符填充的字符数组来创建关卡。我的问题是数组没有按原样填充,最后一行仍为空。我无法解决这个问题,所以很乐意接受任何形式的帮助,这是有问题的代码块:
public static void main(String[] args) throws IOException{
char background[][] = new char [14][20];
try {
FileInputStream fileinput = new FileInputStream("background.txt");
int r;
for(int i=0;i<=13;i++){
for(int j=0;j<19;j++){
while((r = fileinput.read()) != -1){
char c = (char) r;
background[i][j] = c;
break;
}
}
}
fileinput.close();
}
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (int i=0;i<=13;i++){
for(int j=0;j<=19;j++){
System.out.print(background[i][j]);
}
}
}
整个代码也可以在以下链接中找到:http://pastebin.com/HtwMpsjm 这也是.txt文件!
答案 0 :(得分:4)
你不小心有一个条件,我已经对改变后的一行发表了评论。
正如有人在评论中提到的那样,您可能会发现将循环条件视为for(int i=0;i<20;i++)
而不是for(int i=0i<=19;i++)
会使代码更具可读性是有益的。
public static void main(String[] args) throws IOException{
char background[][] = new char [14][20];
try {
FileInputStream fileinput = new FileInputStream("background.txt");
int r;
for(int i=0;i<=13;i++){
for(int j=0;j<=19;j++){//<<THIS LINE WAS CHANGED
while((r = fileinput.read()) != -1){
char c = (char) r;
background[i][j] = c;
break;
}
}
}
fileinput.close();
}
catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
for (int i=0;i<=13;i++){
for(int j=0;j<=19;j++){
System.out.print(background[i][j]);
}
}
}
答案 1 :(得分:0)
为什么我们这里需要多个for循环。如果要从文件中读取字符,可以使用缓冲读取器,可以在一行代码中创建此矩阵,如while((bufferedReader.read(background[i]) != -1) && (++i < 14)){ }
。你也使用while循环来读取一个字符,然后内部的无条件破坏声明不是一个好习惯(在我看来)。尝试
public static void main(String[] args) throws IOException {
char background[][] = new char[14][20];
try {
FileReader fileReader = new FileReader("background.txt");
BufferedReader bufferedReader = new BufferedReader(fileReader);
int i=0;
while((bufferedReader.read(background[i]) != -1) && (++i < 14)){ } // This like created your 2D array
bufferedReader.close();
fileReader.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
for (int i = 0; i <= 13; i++) {
for (int j = 0; j <= 19; j++) {
System.out.print(background[i][j]);
}
}
}