Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如果在while循环中添加if语句,Java缓冲读取器将停止读取行:_Java_Buffered - Fatal编程技术网

如果在while循环中添加if语句,Java缓冲读取器将停止读取行:

如果在while循环中添加if语句,Java缓冲读取器将停止读取行:,java,buffered,Java,Buffered,我正在用java从头开始创建一个游戏引擎,我已经开始使用一个新的保存文件,而不是使用地图图像: 工作并打印每一行: while ((readString = buf.readLine()) != null) { System.out.println("Failed to assign action to line: " + readString); } 不起作用,打印出前3行: while ((readString = buf.readLine()) != null) {

我正在用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);
                }
}

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

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

在代码周围添加以下内容:

try {
   //.. your while-loop here
}
catch(Exception e) {
   e.printStackTrace();
}
然后修复错误

另一个提示:
readString.replace(“Width:,”)
readString.trim()
Integer.parseInt(readString)
不起作用。 函数本身不会更改变量,您需要将其结果指定给变量

例如:

 readString = readString.trim();

可能有一个你没有看到的例外

在代码周围添加以下内容:

try {
   //.. your while-loop here
}
catch(Exception e) {
   e.printStackTrace();
}
然后修复错误

另一个提示:
readString.replace(“Width:,”)
readString.trim()
Integer.parseInt(readString)
不起作用。 函数本身不会更改变量,您需要将其结果指定给变量

例如:

 readString = readString.trim();

可能有一个例外,您正在吞咽(捕获并忽略)您的程序,这是最有可能的候选者:

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

} else if (readString.contains("Height:")){
    readString.replace("Height::", "");
    readString.trim();
    Integer.parseInt(readString);
在这里,您忽略返回的(新)字符串,并继续对原始字符串进行操作。另外,正如您所看到的,您检查了
高度:
,并删除了
高度::
(注意双冒号)。因此,除非您的数据实际包含
Height::
否则调用
Integer.parseInt
时,
Height:
将保留在字符串中,这将导致异常

应该是这样的

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

可能有一个例外,您正在吞咽(捕获并忽略)您的程序,这是最有可能的候选者:

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

} else if (readString.contains("Height:")){
    readString.replace("Height::", "");
    readString.trim();
    Integer.parseInt(readString);
在这里,您忽略返回的(新)字符串,并继续对原始字符串进行操作。另外,正如您所看到的,您检查了
高度:
,并删除了
高度::
(注意双冒号)。因此,除非您的数据实际包含
Height::
否则调用
Integer.parseInt
时,
Height:
将保留在字符串中,这将导致异常

应该是这样的

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

请阅读以了解如何在问题中包含代码。如果代码位于不同的站点上,这真的不太好。我猜可能是Integer.parseInt引发了一个异常,但可能您正在吞咽它。另一件事是尝试在调用字符串上的方法之前复制字符串(然后在副本上调用这些方法),尽管这不会有什么不同。请阅读,了解如何在问题中包含代码。如果代码位于不同的站点上,这真的不太好。我猜可能是Integer.parseInt引发了一个异常,但可能您正在吞咽它。另一件事是尝试在调用字符串上的方法之前复制字符串(然后在副本上调用这些方法),虽然这不会有什么区别。虽然将字符串存储在另一个变量中可能比更改初始值更好。好的,谢谢大家,@JamoBox,我会的,但没有意义,当我除了读入它来设置变量之外,不做任何事情时,请使用短语“更好的实践”虽然将字符串存储在另一个变量中可能比更改初始值更好。好的,谢谢大家,@JamoBox我会的,但是没有任何意义,当我除了读入它来设置变量之外,我不做任何事情时,请使用短语“better practice”