为什么我的阵列没有正确填充?

时间:2014-06-03 16:58:27

标签: java arrays text-files

我正在用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文件!

2 个答案:

答案 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]);
        }
    }
}