忽略下一个输入行的日历输入
Calendar input ignoring next input line
无法理解这个问题。
下面的代码编译和运行良好,除了一个问题 - 在出生日期的 inputReg
行之后(日、月、年部分),代码的下一部分将被跳过出于某种原因。
在此代码的例子中,程序在创建日历后立即忽略 tel = inputReg.nextLine();
。
我一直在研究出生日期部分的位置,发现如果下一个 inputReg.nextLine()
部分放在出生日期部分之后,它总是会被跳过。
运行这一段代码:
Scanner inputReg = new Scanner(System.in);
//initialization of attributes
String IC = "";
String name = "";
String tel = "";
int day = 0;
int month = 0;
int year = 0;
//for date
System.out.print("Enter IC number: ");
IC = inputReg.nextLine();
Calendar dob = new GregorianCalendar(year, month, day);
System.out.print("Enter name: ");
name = inputReg.nextLine();
System.out.println("Enter Date of Birth (DD/MM/YYYY ): ");
day = inputReg.nextInt();
month = inputReg.nextInt();
year = inputReg.nextInt();
System.out.print("Enter telephone number: ");
tel = inputReg.nextLine();
Customer c = new Customer(IC, name, dob, tel);
customerList.add(c);
System.out.println("Customer " + c.getName() + " registered successfuly.");
System.out.println(tel);
给我这个输出:
Enter IC number: XX11
Enter name: Bob
Enter Date of Birth (DD/MM/YYYY ):
10
10
2000
Enter telephone number: Customer Bob registered successfuly.
//ends
我知道我可以简单地将出生日期区域放在最底部,但我不满足于这样做。
我的问题是:是什么导致 inputReg.nextLine() 部分总是被跳过?
顺便说一下,我只在让代码与日历交互时遇到过这个问题,所以也许有一些我没有得到的新东西。
我通过这样做修复了它(如果那是你想要的?)
package com.Whosebug.solutionmaker;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class WhosebugSolutionsRunner {
public static void main(String[] args) {
Scanner inputReg = new Scanner(System.in);
//initialization of attributes
String IC = "";
String name = "";
String tel = "";
int day = 0;
int month = 0;
int year = 0;
//for date
System.out.print("Enter IC number: ");
IC = inputReg.nextLine();
Calendar dob = new GregorianCalendar(year, month, day);
System.out.print("Enter name: ");
name = inputReg.nextLine();
System.out.println("Enter Date of Birth (DD/MM/YYYY ): ");
day = inputReg.nextInt();
month = inputReg.nextInt();
year = inputReg.nextInt();
inputReg.nextLine(); // I added this line to fake an input
System.out.print("Enter telephone number: ");
tel = inputReg.nextLine();
//Customer c = new Customer(IC, name, dob, tel);
//customerList.add(c);
//System.out.println("Customer " + c.getName() + " registered successfuly.");
System.out.println(tel);
} }
顺便说一句 - 注释掉了我从你那里看不到的代码?
我相信 Oracle 文档中 nextLine() 方法的摘录中的这句话是一个线索? : Advances this scanner past the current line and returns the input that was skipped. This method returns the rest of the current line, excluding any line separator at the end. The position is set to the beginning of the next line.
此外,nextInt() 可能不会将输入重置为行首? (只是假设)。
在有用的提示后被难倒了。没有 'consume' nextInt() 之后和使用 nextLine() 之前的行,因此 nextLine() 被忽略了。
问题是您的 nextInt
方法无法读取您为 year = inputReg.nextInt()
输入值的换行符。您可以通过两种方式解决它。
解决方案 1
添加一个nextLine
方法来捕获'\n'
year = inputReg.nextInt();
inputReg.nextLine();
解决方案 2
仅使用 nextLine()
读取输入
year = Integer.parseInt(inputReg.nextLine());
无法理解这个问题。
下面的代码编译和运行良好,除了一个问题 - 在出生日期的 inputReg
行之后(日、月、年部分),代码的下一部分将被跳过出于某种原因。
在此代码的例子中,程序在创建日历后立即忽略 tel = inputReg.nextLine();
。
我一直在研究出生日期部分的位置,发现如果下一个 inputReg.nextLine()
部分放在出生日期部分之后,它总是会被跳过。
运行这一段代码:
Scanner inputReg = new Scanner(System.in);
//initialization of attributes
String IC = "";
String name = "";
String tel = "";
int day = 0;
int month = 0;
int year = 0;
//for date
System.out.print("Enter IC number: ");
IC = inputReg.nextLine();
Calendar dob = new GregorianCalendar(year, month, day);
System.out.print("Enter name: ");
name = inputReg.nextLine();
System.out.println("Enter Date of Birth (DD/MM/YYYY ): ");
day = inputReg.nextInt();
month = inputReg.nextInt();
year = inputReg.nextInt();
System.out.print("Enter telephone number: ");
tel = inputReg.nextLine();
Customer c = new Customer(IC, name, dob, tel);
customerList.add(c);
System.out.println("Customer " + c.getName() + " registered successfuly.");
System.out.println(tel);
给我这个输出:
Enter IC number: XX11
Enter name: Bob
Enter Date of Birth (DD/MM/YYYY ):
10
10
2000
Enter telephone number: Customer Bob registered successfuly.
//ends
我知道我可以简单地将出生日期区域放在最底部,但我不满足于这样做。
我的问题是:是什么导致 inputReg.nextLine() 部分总是被跳过?
顺便说一下,我只在让代码与日历交互时遇到过这个问题,所以也许有一些我没有得到的新东西。
我通过这样做修复了它(如果那是你想要的?)
package com.Whosebug.solutionmaker;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;
public class WhosebugSolutionsRunner {
public static void main(String[] args) {
Scanner inputReg = new Scanner(System.in);
//initialization of attributes
String IC = "";
String name = "";
String tel = "";
int day = 0;
int month = 0;
int year = 0;
//for date
System.out.print("Enter IC number: ");
IC = inputReg.nextLine();
Calendar dob = new GregorianCalendar(year, month, day);
System.out.print("Enter name: ");
name = inputReg.nextLine();
System.out.println("Enter Date of Birth (DD/MM/YYYY ): ");
day = inputReg.nextInt();
month = inputReg.nextInt();
year = inputReg.nextInt();
inputReg.nextLine(); // I added this line to fake an input
System.out.print("Enter telephone number: ");
tel = inputReg.nextLine();
//Customer c = new Customer(IC, name, dob, tel);
//customerList.add(c);
//System.out.println("Customer " + c.getName() + " registered successfuly.");
System.out.println(tel);
} }
顺便说一句 - 注释掉了我从你那里看不到的代码?
我相信 Oracle 文档中 nextLine() 方法的摘录中的这句话是一个线索? : Advances this scanner past the current line and returns the input that was skipped. This method returns the rest of the current line, excluding any line separator at the end. The position is set to the beginning of the next line.
此外,nextInt() 可能不会将输入重置为行首? (只是假设)。
在有用的提示后被难倒了。没有 'consume' nextInt() 之后和使用 nextLine() 之前的行,因此 nextLine() 被忽略了。
问题是您的 nextInt
方法无法读取您为 year = inputReg.nextInt()
输入值的换行符。您可以通过两种方式解决它。
解决方案 1
添加一个nextLine
方法来捕获'\n'
year = inputReg.nextInt();
inputReg.nextLine();
解决方案 2
仅使用 nextLine()
year = Integer.parseInt(inputReg.nextLine());