0

我正在使用 java 从头开始​​创建游戏引擎,我已经开始处理新的保存文件,而不是使用图像作为地图:

工作并打印出每一行:

while ((readString = buf.readLine()) != null) {
    System.out.println("Failed to assign action to line: " + readString);
}

不起作用,打印出前 3 行:

while ((readString = buf.readLine()) != null) {
                if (readString.contains("Width:")){
                    readString.replace("Width:", "");
                    readString.trim();
                    Integer.parseInt(readString);
                    System.out.println(readString);
                }else if (readString.contains("Height:")){
                    readString.replace("Height::", "");
                    readString.trim();
                    Integer.parseInt(readString);
                    System.out.println(readString);
                }else{
                    System.out.println("Failed to assign action to line: " + readString);
                }
}

如您所见,第一个正在工作并将每一行打印到控制台,第二个在读取第三行后停止。在研究问题时我没有发现任何东西,而且我的语法似乎是正确的。我的代码有什么问题?

4

2 回答 2

5

可能有一个您没有看到的异常。

把它放在你的代码周围:

try {
   //.. your while-loop here
}
catch(Exception e) {
   e.printStackTrace();
}

然后修复错误。

另一个提示:readString.replace("Width:", ""),readString.trim()并且Integer.parseInt(readString)不会工作。这些函数不会更改变量本身,您需要将它们的结果分配给一个变量。

例子:

 readString = readString.trim();
于 2014-01-05T20:36:48.953 回答
0

您可能会在程序中吞下(捕获和忽略)一个例外,这是最可能的候选人:

字符串是不可变的,因此当您替换/修剪原始字符串时,原始字符串是相同的,并返回一个新字符串。

} else if (readString.contains("Height:")){
    readString.replace("Height::", "");
    readString.trim();
    Integer.parseInt(readString);

在这里,您忽略返回的(新)字符串并继续对原始字符串进行操作。此外,如您所见,您检查Height:并删除Height::了(注意双冒号)。因此,除非您的数据实际上包含Height::在调用this 导致异常Height:时将留在字符串中。Integer.parseInt

它应该更像这样

} else if (readString.contains("Height:")){
    readString = readString.replace("Height:", "");
    readString = readString.trim();
    Integer.parseInt(readString);
于 2014-01-05T21:35:47.487 回答