0

所以到目前为止我的代码可以正常工作,但我有两个问题。此代码允许您输入月、日和年,并告诉您它有多少天。本质上它是一个闰年检查器,但包括每个月(无论出于何种原因)。

现在我知道使案例工作的唯一方法是使用数字,但我希望用户能够输入月份的实际名称作为输入,并且代码仍然知道将其带到哪个案例。当我尝试命名案例月份名称时,它说它无法识别该变量。所以这是我的第一个问题。

我的第二个问题是,如果用户尝试在“年份”部分输入不是整数的字符,我希望它给出错误消息。有人告诉我使用 .hasNextInt() 但我完全不确定它的功能或如何实现它。我在这里查看了其他人的代码,试图弄清楚它是如何使用的,但无济于事。这是我的代码,任何建议或指导将不胜感激。先感谢您!

public class MonthLength {
  public static void main(String[] args) {
    // Prompt the user to enter a month
    SimpleIO.prompt("Enter a month name: ");
    String userInput = SimpleIO.readLine();
    int month = Integer.parseInt(userInput);

    // Terminate program if month is not a proper month name
    if (month < 1 || month > 12) {
      System.out.println("Illegal month name; try again");
      return;
    }

    // Prompt the user to enter a year
    SimpleIO.prompt("Enter a year: ");
    userInput = SimpleIO.readLine();
    int year = Integer.parseInt(userInput);

    //Terminate program if year is not an integer
    if (year < 0) {
       System.out.println("Year cannot be negative; try again");
       return;
    }

    // Determine the number of days in the month
    int numberOfDays;
    switch (month) {
      case 2:  // February
               numberOfDays = 28;
               if (year % 4 == 0) {
                 numberOfDays = 29;
                 if (year % 100 == 0 && year % 400 != 0)
                   numberOfDays = 28;
               }
               break;

      case 4:  // April
      case 6:  // June
      case 9:  // September
      case 11: // November
               numberOfDays = 30;
               break;

      default: numberOfDays = 31;
               break;
    }

    // Display the number of days in the month
    System.out.println("There are " + numberOfDays +
                       " days in this month");
  }
}
4

3 回答 3

0
  1. 对于您的第一个问题,您可以使用enum 如何为 Java 6 枚举实现 values()?

  2. 对于第二个问题,您可以要求用户输入 aString并使用Integer.parseInt(String)将其转换为,int这样您就不必执行任何检查。希望有帮助

于 2012-11-02T21:40:20.070 回答
0

以前的 java 7版本不允许String作为switch中的参数。在 java 7 中,您可以将 String 作为参数传递给 switch。

你可以在这里使用枚举。

enum Months{
JAN,FEB,MAR,APR}
于 2012-11-02T21:37:06.017 回答
0

Chaitanya10 详细说明了为什么您的第一个问题是这样的。如果您需要对字符串(早期的 java 版本)进行比较,则需要构建一个 if-else 块:

if (monthInput.toLower().equals("january") {
  month = 1;
} else if (monthInput.toLower().equals("february") {
  ....etc....
}

对于您的第二个问题,我会将用户输入捕获为 a String,然后使用检查以确保它是他们输入的数字。创建一个这样的函数:

public boolean isNumeric(String input) {
  try {
    Integer.parseInt(input);
    return true;
  } catch (NumberFormatException numForEx) {
    return false;
  }
}

如果返回 true,您可以安全地将 String 转换为整数:

year = Integer.parseInt( input );
于 2012-11-02T21:42:46.347 回答