2016-06-29 2 views
0

есть ли «более аккуратный» способ написания этого кода? Я сторонник простоты, и для меня это кажется слишком повторяющимся. (Я меняю дни на номера, чтобы я мог использовать их в своих собственных if-заявлениях, если кто-то задавался вопросом) Любые предложения?Java Weekday input Validation

Scanner scanText = new Scanner(System.in); 

System.out.print("Enter Day: "); 
String weekday = scanText.nextLine(); 

int day = 0; 

if (weekday.equalsIgnorCase("Monday")) 
    day = 1; 
else if (weekday.equalsIgnorCase("Tuesday")) 
    day = 2; 
else if (weekday.equalsIgnorCase("Wednesday")) 
    day = 3; 
else if (weekday.equalsIgnorCase("Thursday")) 
    day = 4; 
else if (weekday.equalsIgnorCase("Friday")) 
    day = 5; 
else if (weekday.equalsIgnorCase("Saturday")) 
    day = 6; 
else if (weekday.equalsIgnorCase("Sunday")) 
    day = 7; 
else { 
    System.out.print("Error! Invalid day: "); 
    weekday = scanText.nextLine(); 
} 

ответ

2

Если вы не используете JDK 1.8, этот код может помочь вам:

 List<String> strDays = Arrays.asList("Monday", "Tuesday", "Wednesday", "Thusday", "Friday", "Saturday", "Sunday"); 

    String weekday = scanText.nextLine(); 

    int day = 0; 
    if(strDays.contains(weekday)) { 

     day = strDays.indexOf(weekday) + 1; 
    } else { 
     System.out.print("Error! Invalid day: "); 
     weekday = scanText.nextLine(); 
    } 
0
import java.io.*; 
import java.text.*; 
import java.util.*; 


public class DayofWeekExample { 

    public static int getIntDayOfWeek(String dayOfWeek) 
    { 
     try 
     { 
      DateFormat formatter ; 
      Date date ; 
      formatter = new SimpleDateFormat("EEE"); 
      date = (Date)formatter.parse(dayOfWeek); 
      GregorianCalendar g = new GregorianCalendar(); 
      g.setTime(date); 
      return g.get(Calendar.DAY_OF_WEEK); 
     } 
     catch (ParseException e) 
     { 
      System.out.println("Exception :"+e); 
     } 
     return 0; 
    } 

    public static void main(String[] args) throws IOException { 
     // Beginnig day is Sunday 

     Scanner scanText = new Scanner(System.in); 

     System.out.print("Enter Day: "); 
     String weekday = scanText.nextLine(); 

     System.out.println("-> " + getIntDayOfWeek(weekday)); 


    } 
} 

В первый день недели является производным от текущей локализации. Если вы не задали языковой стандарт календаря (Calendar.getInstance(Locale), или new GregorianCalendar(Locale)), он будет использовать по умолчанию систему.

+0

Это здорово, но как я могу использовать это, чтобы получить пользовательский ввод, а затем получить номер с определенного дня? – user6512771

0

Поскольку вы в основном отображения значения String к int стоимости, я думаю, его типичное использование при Map. Вы можете написать, как показано ниже (один недостаток того, вы должны инициализировать Map но это может быть воплощено для лучшей читаемости)

Scanner scanText = new Scanner(System.in); 

     System.out.print("Enter Day: "); 
     String weekday = scanText.nextLine(); 

     int day = 0; 
     Map<String,Integer> day_of_week=new HashMap<String,Integer>(); 
     day_of_week.put("MONDAY", 1); 
     day_of_week.put("TUESDAY", 2); 
     day_of_week.put("WEDNESDAY", 3); 
     day_of_week.put("THURSDAY", 4); 
     day_of_week.put("FRIDAY", 5); 
     day_of_week.put("SATURDAY", 6); 
     day_of_week.put("SUNDAY", 7); 

     if(day_of_week.containsKey(weekday.toUpperCase())){ 
      day = day_of_week.get(weekday.toUpperCase()).intValue(); 
     }else{ 
      System.out.print("Error! Invalid day: "); 
       weekday = scanText.nextLine(); 
     } 

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

+0

Мне было интересно, как это сделать, чтобы вернуться к началу инструкции if после else? – user6512771

+0

вам нужно будет положить целую вещь в цикле 'while' или' do-while' и сломать любую специальную 'String' по вашему выбору. [См. Это] (http://stackoverflow.com/questions/20589178/i-have-to-make-a-loop-taking-a-users-input-until-done-is-entered) для ответа Эллиотта. Вместо 'weekday = scanText.nextLine();', вы можете просто сказать 'continue' в' else'. –