[英]Scanner input gets appended to textfile despite condition in while-loop
我有一个小的Java应用程序,在终端执行时将接收字符串输入,并将这些字符串保存到文本文件中。 我有一个字符串exit
,它将提示应用程序退出。 但是,由于某种原因,尽管有while(!)
循环,但字符串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循环条件之前 ,在循环中进行所有处理。
你有:
while(!"exit".equalsIgnoreCase(input)){
input = scanner.nextLine();
...
writer.append(input + "\n");
...
}
假设用户键入“ exit”作为第一个命令,则流程为:
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;
}
有很多方法可以修复它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.