Как использовать строки так же, как ввод int? - PullRequest
0 голосов
/ 10 октября 2018
import java.util.Scanner;
public class DaysInMonth
{
public static void main(String[] args)
  {
  Scanner input = new Scanner(System.in);
  System.out.print("Enter a year:")
  int year = input.nextInt();    enter code here
  System.out.print("Enter a month:"); 
  int month = input.nextInt();    enter code here
  int days = 0;       
  boolean isLeapYear = (year % 4 == 0 && year % 100 != 0)||(year % 400 == 0);       

  switch (month){ 
  case 1: 
  days = 31; 

  break; 
  case 2: 
  if (isLeapYear) 
  days = 29; 
  else 
  days = 28; 

  break; 
  case 3: 
  days = 31; 
  break; 

 case 4: 
 days = 30; 
 break; 

 case 5: 
 days = 31; 
 break; 

 case 6: 
 days = 30; 
 break; 

  case 7: 
  days = 31; 
  break; 

  case 8 
  days = 31; 
  break; 

 case 9: 
 days = 30; 
 break; 

 case 10: 
 days = 31; 
 break; 

 case 11: 
 days = 30; 
 break; 

 case 12: 
 days = 31; 
 break; 
 default: 

String response = "Have a Look at what you've done and try again";
System.out.println(response); 
 System.exit(0); 
} 
  String response = "There are " +days+ " Days in Month "+month+ " of Year "   +year+ ".\n"; 
  System.out.println(response); // new line to show the result to the screen. 
} 

}

Почему я не могу набрать в январе, чтобы получить тот же результат, если я наберу 1?На нем должно быть напечатано «В январе 2018 года 31 день». Я инициализировал месяц так, чтобы он читал январь или любой другой месяц.

Я знаю, что у меня есть int, но мне интересно, как я могу также использовать январь для 1, чтобы получить тот же вывод.

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Вы можете использовать Strings в операторе switch для проверки нескольких эквивалентных случаев:

switch (monthInput.toLowerCase()) {
    case "january":
    case "jan":
    case "1":
        days = 31;
        break;

    case "february":
    case "feb":
    case "2":
        days = isLeapYear ? 29 : 28;
        break;

    case "march":
    case "mar":
    case "3":
        days = 31;
        break;

    // etc.

    default:
        System.out.println(monthInput + " is not a valid month");
        input.close();
        System.exit(0);
}

Но это означает, что вы должны читать свои входные данные как String, а не как int ...

Scanner input = new Scanner(System.in);
System.out.print("Enter a year:");
int year = input.nextInt();     // enter code here
input.nextLine(); // read the rest of the line (if any)

System.out.print("Enter a month:");
String monthInput = input.nextLine();

Обратите внимание на использование input.nextLine(); после .nextInt() - это потому, что вызов nextInt() не использует весь ввод, он только читает intчто вы ввели для Года, он не читает новую строку (клавиша ввода), поэтому вы должны прочитать это, чтобы быть готовым к чтению ввода следующий , который является номером месяцаили имя.

0 голосов
/ 10 октября 2018

Я знаю, что у меня есть int, но мне интересно, как я могу также использовать январь для 1, чтобы получить тот же вывод.

Простой подход заключается в использовании массива имен

// before main.
static final String[] MONTH = "?,Jan,Feb,Mar,Apr,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split(",");

// inside main
String monthStr = MONTH[month];

При необходимости добавьте полные названия месяцев.

...