Java 在System.in.read()之后,扫描仪nextLine()不工作
我有以下代码,如果在扫描仪之前使用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
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混合使用。用一个或另一个。