我有一个小的小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");
    ...
}
.

假设用户类型“退出”作为第一个命令,流程为:

  1. input最初是null
  2. while条件成功。
  3. input读取,它现在是“退出”。
  4. input,即“退出”,写入文件。
  5. while循环重启,评估条件,失败,循环不再执行。
  6. 请注意,“退出”已写入文件。

    您必须重新制作逻辑一点以确保不会发生文件写入。这不是一种罕见的情况。有很多解决方案,具体取决于您的偏好。您可以将赋值和比较组合到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归因
不隶属于 StackOverflow
scroll top