【发布时间】:2018-10-12 21:18:56
【问题描述】:
我正在尝试创建一个程序来读取month/day/year 形式的日期输入。不幸的是,我目前停留在声明int year = dateScan.nextInt();。当我运行我的程序时,它在那条线上崩溃。但是,如果我删除整个语句并将 System.out.println("year: " + year); 更改为 System.out.println("year: " + dateScan()); ,程序不会崩溃。我担心的是我需要变量 year 来打印整个日期,所以最后的打印语句 System.out.println("\nThe date is: " + monthName + " " + day + "," + year); 将起作用。我需要知道为什么它在那条线上崩溃。谢谢!
公共类 DateFormat {
public static void main(String[] args) {
Scanner keyboard = new Scanner (System.in); // define a Scanner object attached to the keyboard
System.out.print("Enter a date in the form month/day/year: "); // prompt user for input
String inputString = keyboard.nextLine(); // read entire input line as a String
Scanner dateScan = new Scanner (inputString); // define a Scanner object attached to a String
// set the Scanner's delimiter to "zero or more spaces followed by a slash (/) followed by zero or more spaces"
dateScan.useDelimiter("\\s*/\\s*");
int month = dateScan.nextInt();
if ( ! dateScan.hasNextInt()) // is the first input value an int?
{
String badInput = dateScan.next();
System.out.println("Error: expected an integer, encountered: " + badInput);
System.out.print("Try again later...");
System.exit(1);
}
System.out.println("month: " + month); // safe to read first input value
int day = dateScan.nextInt();
if ( ! dateScan.hasNextInt()) // is the next input value an int?
{
String badInput = dateScan.next();
System.out.println("Error: expected an integer, encountered: " + badInput);
System.out.print("Try again later...");
System.exit(1);
}
System.out.println("day: " + day); // safe to read next input value
int year = dateScan.nextInt();
if ( ! dateScan.hasNextInt()) // is the next input value an int?
{
String badInput = dateScan.next();
System.out.println("Error: expected an integer, encountered: " + badInput);
System.out.print("Try again later...");
System.exit(1);
}
System.out.println("year: " + year); // safe to read next input value
// the user entered an integer
String monthName = "Unknown month name";
switch(month)
{
case 1: monthName = "January"; break;
case 2: monthName = "February"; break;
case 3: monthName = "March"; break;
case 4: monthName = "April"; break;
case 5: monthName = "May"; break;
case 6: monthName = "June"; break;
case 7: monthName = "July"; break;
case 8: monthName = "August"; break;
case 9: monthName = "September"; break;
case 10: monthName = "October"; break;
case 11: monthName = "November"; break;
case 12: monthName = "December"; break;
}
if (month < 1 || month > 12)
System.out.println("Error: " + month + " is an invalid month value");
else
System.out.println("\nThe date is: " + monthName + " " + day + "," + year);
}
}
【问题讨论】:
-
您需要在调用
nextInt之前检查hasNextInt才能真正获得该int。 -
dateScan是一个引用,不能像方法dateScan()那样访问它
标签: java variables if-statement switch-statement java.util.scanner