扫描仪输入尽管循环中的条件,但仍会附加到文本文件
-
20-12-2019 - |
题
我有一个小的小java应用程序,在终端执行上,将采用字符串输入,并将这些字符串保存到文本文件中。我有字符串生成的exit
,它会提示应用程序退出。但是,出于某种原因,尽管具有该生成扫描码循环,但是终于将字符串生成的exit
附加到文档。什么可能是问题?
try{
Scanner scanner = new Scanner(System.in);
String input = null;
while(!"exit".equalsIgnoreCase(input)){
input = scanner.nextLine();
String fileLocation = "/Users/myName/Dropbox/myDocument.txt";
FileWriter writer = new FileWriter(fileLocation,true);
writer.append(returnDate()+": ");
writer.append(input + "\n");
writer.flush();
writer.close();
}
}catch(Exception e){
e.printStackTrace();
}
. 解决方案
在精神上遵循您的代码。您在循环中进行所有处理,在下次循环条件之前进行评估。
你有:
while(!"exit".equalsIgnoreCase(input)){
input = scanner.nextLine();
...
writer.append(input + "\n");
...
}
.
假设用户类型“退出”作为第一个命令,流程为:
-
input
最初是null
。 -
while
条件成功。 -
input
读取,它现在是“退出”。 -
input
,即“退出”,写入文件。 -
while
循环重启,评估条件,失败,循环不再执行。
请注意,“退出”已写入文件。
您必须重新制作逻辑一点以确保不会发生文件写入。这不是一种罕见的情况。有很多解决方案,具体取决于您的偏好。您可以将赋值和比较组合到while
语句中:
while (!"exit".equalsIgnoreCase(input = scanner.nextLine())) {
write input;
}
.
您可以有一个冗余支票(对您的简单示例没有意义,并且还经常表示整体逻辑改进的空间):
while (input is not exit) {
read input;
if (input is not exit) write input;
}
.
根本无法使用循环条件:
while (true) {
read input;
if (input is exit) break;
write input;
}
.
有很多方法可以解决它。
不隶属于 StackOverflow