Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/390.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 在System.in.read()之后,扫描仪nextLine()不工作_Java - Fatal编程技术网

Java 在System.in.read()之后,扫描仪nextLine()不工作

Java 在System.in.read()之后,扫描仪nextLine()不工作,java,Java,我有以下代码,如果在扫描仪之前使用System.in.read,我将面临一个问题。 然后,光标通过跳过nextLine函数在末尾移动 import java.util.Scanner; public class InvoiceTest{ public static void main(String [] args) throws java.io.IOException { System.out.println("Enter a Charater: "); char c = (ch

我有以下代码,如果在扫描仪之前使用System.in.read,我将面临一个问题。 然后,光标通过跳过nextLine函数在末尾移动

import java.util.Scanner;
public class InvoiceTest{
public static void main(String [] args) throws java.io.IOException {
    System.out.println("Enter a Charater: ");
    char c = (char) System.in.read();

    Scanner input = new Scanner(System.in);
    System.out.println("Enter id No...");
    String id_no = input.nextLine();

    System.out.println("Charater You entered "+ c +" Id No Entered "+ id_no);

    }
}

在输入characterSystem.in.read时,您没有使用换行符,因此input.nextLine将使用它并跳过它

解决方案:

在读取id的输入之前,先使用新行字符

System.out.println("Enter a Charater: ");
    char c = (char) System.in.read();

    Scanner input = new Scanner(System.in);
    System.out.println("Enter id No...");
    input.nextLine(); //will consume the new line character spit by System.in.read()
    String id_no = input.nextLine();

    System.out.println("Charater You entered "+c+" Id No Entered "+id_no);

    }
EJP评论如下:

不要将System.in.read与新的ScannerSystem.in混合使用。用一个或另一个

好建议

那么,为什么混合从流中读取和使用扫描仪是个坏主意呢

嗯,因为扫描器操作通常会在输入流上提前读取,将未使用的字符保留在内部缓冲区中。因此,如果您执行扫描操作,然后调用读取流,则很有可能读取操作实际上会跳过字符。这种行为很可能令人困惑和不可预测。。。并取决于输入字符的实际来源。

不要将System.in.read与新的ScannerSystem.in混合使用。用一个或另一个。