2016-02-26 2 views
0

привет им пытаются исправить эту программу,Как сделать программу запросить дату ввода несколько раз, если неправильно

Напишите программу Java, которая отображает календарь любого месяца любого года между 1900 и 2099

Программа должна:
1. Запросить пользователя в течение определенного месяца с содержательным сообщением.

  1. Если входное значение является допустимой датой (т. Е. 3 символа, обозначающие нужный месяц (т.е. JAN, FEB, ..., в любой комбинации букв нижнего и верхнего регистра, следуют пробелом и целым числом между 1900 и 2099 годами), то должен быть отображен календарь на указанную дату.

2.1 Если входное значение не является допустимой датой, пользователь должен быть проинформирован о том, что дата не была приемлемой , а затем запросить еще раз для другой даты. Если указано более трех последовательных ошибочных дат, программа должна быть завершена с соответствующим сообщением об ошибке.

2.2. После отображения календаря программа должна спросить, хочет ли пользователь ввести другую дату (вы хотите продолжить?)

2.3. Пользователь должен ответить либо «да», «нет», «y» или «n» в любой комбинации букв в нижнем и верхнем регистре.

2.4. Если указан неверный ответ, пользователь должен быть проинформирован о том, что ответ был неприемлемым, а затем снова предлагается для другого ответа. Если задано более трех последовательных ошибочных ответов, программа должна быть прервана с соответствующим сообщением об ошибке

2.5. Если ответ на этапе 2.2 равен «Да» (в любой разрешенной форме), программа должна продолжить с шага 1. Если ответ «Нет» (в любой разрешенной форме), программа должна завершиться сообщением о том, что программа завершается нормально.

  1. Все входные данные должны быть выполнены с использованием объекта сканера i.e. Сканер kb = новый сканер (System.in);

  2. Все выходные должно быть сделано с помощью System.out.print или System.out.println

до сих пор я получил до 2,1 мое заявление, если в программе сообщает пользователю о том, что дата была неправильно, однако я боюсь, как затем попросить пользователя о другой дате, и если пользователь продолжает вводить неверную дату, выполняя это 3 раза перед завершением работы программы, и если пользователь вводит правильную дату, продолжая печатать календарь.

это то, что я до сих пор

public static int getMonthNumber(String s) { 
    if (s.equalsIgnoreCase("jan")) { 
     return 1; 
    } 
    if (s.equalsIgnoreCase("feb")) { 
     return 2; 
    } 
    if (s.equalsIgnoreCase("mar")) { 
     return 3; 
    } 
    if (s.equalsIgnoreCase("apr")) { 
     return 4; 
    } 
    if (s.equalsIgnoreCase("may")) { 
     return 5; 
    } 
    if (s.equalsIgnoreCase("jun")) { 
     return 6; 
    } 
    if (s.equalsIgnoreCase("jul")) { 
     return 7; 
    } 
    if (s.equalsIgnoreCase("aug")) { 
     return 8; 
    } 
    if (s.equalsIgnoreCase("sep")) { 
     return 9; 
    } 
    if (s.equalsIgnoreCase("oct")) { 
     return 10; 
    } 
    if (s.equalsIgnoreCase("nov")) { 
     return 11; 
    } 
    if (s.equalsIgnoreCase("dec")) { 
     return 12; 
    } else { 
     System.out.println("Not valid month!"); 

    } 
    return 0; 
} 

    public static int getDaysIn(int month, int year) { 
    switch (month) { 
     case 1: 
      return 31; 
     case 2: 
      if (isLeapYear(month)) { 
       return 28; 
      } else { 
       return 29; 
      } 
     case 3: 
      return 31; 
     case 4: 
      return 30; 
     case 5: 
      return 31; 
     case 6: 
      return 30; 
     case 7: 
      return 31; 
     case 8: 
      return 31; 
     case 9: 
      return 30; 
     case 10: 
      return 31; 
     case 11: 
      return 30; 
     case 12: 
      return 31; 
     default: 
      return -1; 
    } 
} 

    public static boolean isLeapYear(int year) { 
    int month = 0; 
    int s = getDaysIn(month, year); 
    return year % 4 == 0 && (year % 100 != 0) || (year % 400 == 0); 
} 

    public static String getMonthName(int month) { 
    switch (month) { 
     case 1: 
      return "January"; 
     case 2: 
      return "February"; 
     case 3: 
      return "March"; 
     case 4: 
      return "April"; 
     case 5: 
      return "May"; 
     case 6: 
      return "June"; 
     case 7: 
      return "July"; 
     case 8: 
      return "August"; 
     case 9: 
      return "September"; 
     case 10: 
      return "October"; 
     case 11: 
      return "November"; 
     case 12: 
      return "December"; 
     default: 
      return "Invalid month."; 
    } 
    } 

    public static int getStartDay(int month, int year) { 
    int days = 0; 
    for (int i = 1900; i < year; i++) { 
     days = days + 365; 
     if (isLeapYear(i)) { 
      days = days + 1; 

     } 
    } 
    for (int i = 1; i < month; i++) { 
     days = days + getDaysIn(i, year); 
    } 
    int startday = (days % 7) + 2; 
    return startday; 

} 

    public static void displayCalendar(int month, int year) { 
    String monthName = getMonthName(month); 
    int startDay = getStartDay(month, year); 
    int monthDays = getDaysIn(month, year); 

    System.out.println(" Sun Mon Tue Wed Thu Fri Sat"); 
    int weekDay = startDay - 1; 
    for (int i = 1; i <= startDay; i = i + 1) { 
     System.out.print(" "); 
    } 
    for (int x = 1; x <= monthDays; x++) { 
     weekDay = weekDay + 1; 
     if (weekDay > 7) { 
      System.out.println(); 
      weekDay = 1; 
     } 
     System.out.format(" %3d", x); 
    } 
    if (weekDay > 7) { 
     System.out.println(); 
    } 
} 

    public static void main(String[] args) { 
    Scanner scan = null; 
    Scanner kb = new Scanner(System.in); 
    System.out.print("Give the first three letters of a month and enter the year: "); 
    System.out.print(" "); 
    String month; 
    int year; 
    month = kb.next(); 
    year = kb.nextInt(); 
    int yearno = year; 
    int monthno = getMonthNumber(month); 
    if (year > 2099) 
     System.out.println("     Invalid Year!"); 

    if (year < 1900); 
     System.out.println("     Invalid Year!"); 



    System.out.println(); 
    displayCalendar(monthno, yearno); 
    System.out.println(); 
    System.out.println(); 
    System.out.println("Do you want to continue? y/n "); 

если год неправильно печатает недействителен год, но теперь м застрял на том, как спрашивать 3 связи до окончания программы/продолжения, если пользователь вводит правильную дату в одной из трех попыток.до сих пор с моей программой, если пользователь вводит действительную дату правильный календарь печатается

ответ

0

то, что вам нужно сделать, это петля

int monthno = 0; 
    while (monthno == 0) { 
    System.out.print("Give the first three letters of a month"); 
    month = kb.next(); 
    monthno = getMonthNumber(month);   
} 

и сделать то же самое для других входов

BTW код было бы много чистого, если бы вы провели экскурсию months в ArrayList, а затем просто сделали get, чтобы получить значение. Это будет либо существовать, либо нет.

Смежные вопросы