我有一个小的Java应用程序,在终端执行时,将采用字符串输入,并将这些字符串保存到文本文件中。我有字符串exit
,它会提示应用程序退出。但是,出于某种原因,尽管有exit
循环,但字符串while(!)
会附加到文档中。可能是什么问题?
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();
}
答案 0 :(得分:2)
在心理上遵守您的准则。你在循环中进行所有处理,之前下一次评估while循环条件。
你有:
while(!"exit".equalsIgnoreCase(input)){
input = scanner.nextLine();
...
writer.append(input + "\n");
...
}
假设用户键入“exit”作为第一个命令,则流程为:
input
最初为null
。while
条件成功。input
被读取,现在是“退出”。 input
,即“退出”,写入档案。while
循环重启,条件被评估,失败,循环不再执行。请注意,“exit”已写入文件。
您必须稍微修改一下逻辑,以确保不会发生文件写入。这不是一种罕见的情况。根据您的偏好,有许多解决方案。您可以将赋值和比较组合到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;
}
有很多方法可以解决它。