如果在while循环中添加if语句,Java缓冲读取器将停止读取行:
我正在用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) {
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”