Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java hasNextLine()在While循环中始终返回true_Java_While Loop_Java.util.scanner_Filewriter - Fatal编程技术网

Java hasNextLine()在While循环中始终返回true

Java hasNextLine()在While循环中始终返回true,java,while-loop,java.util.scanner,filewriter,Java,While Loop,Java.util.scanner,Filewriter,这个问题与我之前提出的关于同一节目的问题相关联,可以在这里查看: 我已经修复了上面的问题,并将函数重写为while循环,而不是do-while,但现在我遇到了相反的问题,即没有任何内容写入文件。我插入了一个print语句来告诉我hasNextLine的状态,它总是返回true,即使输入了一个空行,也就是我希望编写器终止的时候 以下是更新的代码: import java.util.Scanner; import java.io.FileNotFoundException; import java.

这个问题与我之前提出的关于同一节目的问题相关联,可以在这里查看:

我已经修复了上面的问题,并将函数重写为while循环,而不是do-while,但现在我遇到了相反的问题,即没有任何内容写入文件。我插入了一个print语句来告诉我hasNextLine的状态,它总是返回true,即使输入了一个空行,也就是我希望编写器终止的时候

以下是更新的代码:

import java.util.Scanner;
import java.io.FileNotFoundException;
import java.io.PrintWriter;;

public class Lab_Week8_WriteAStory {
    public static void main(String[] args) throws FileNotFoundException  {  

        Scanner whatToWrite = new Scanner (System.in);
        PrintWriter writing = new PrintWriter ("Read and Write Files/output.txt");

        while (whatToWrite.hasNextLine()){
            String writeToFile = whatToWrite.nextLine();
            writing.println(writeToFile);
            System.out.println (whatToWrite.hasNextLine());
        }

        writing.close();
        whatToWrite.close();
    }
}

检查Scanner.hasNextLine的文档:

如果此扫描仪的输入中有另一行,则返回true。此方法在等待输入时可能会阻塞。扫描仪不会超过任何输入


这就是正在发生的事情。由于您使用System.in作为输入源,因此该方法正在等待您的输入,一旦您提供输入,它将返回true并继续下一行,并且该过程将重复进行。

请查看有关Scanner.hasNextLine的文档:

如果此扫描仪的输入中有另一行,则返回true。此方法在等待输入时可能会阻塞。扫描仪不会超过任何输入


这就是正在发生的事情。由于您使用System.in作为输入源,因此该方法正在等待您的输入,一旦您提供输入,它将返回true并继续下一行,并且该过程将重复自身。

hasNextLine不会测试下一行是否为空。它测试是否有下一行。扫描仪从System.in读取的数据总是有下一行,除非它已关闭。hasNextLine不会测试下一行是否为空。它测试是否有下一行。除非关闭,否则扫描仪从System.in读取的数据将始终有下一行。