2016-06-29 1 views
0

이 코드를 작성하는 데 "세련된"방법이 있습니까? 나는 단순함을 고집하는 사람이고 이것은 나에게 너무 반복적으로 보인다. (누군가가 궁금해하는 경우, 나는 그들 자신의 if 서술문에서 사용할 수 있도록 일을 숫자로 바꾼다.) 어떤 제안? 주의Java 평일 입력 유효화

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

당신은 기본적으로 int 값, 내 생각, Map의 그것의 일반적인 사용 사례에 String 값을 매핑하고 있기 때문에. 당신은 아래와 같이 쓸 수 있습니다 (하나의 단점 당신이 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 문 시작 부분으로 돌아갈 수 있습니까? – user6512771

+0

당신은'while' 또는'do-while' 루프에 모든 것을 넣고 여러분이 선택한 특별한'String'을 깰 필요가 있습니다. [이보십시오] 엘리엇의 대답에 대한 (http://stackoverflow.com/questions/20589178/i-have-to-make-a-loop-taking-a-users-input-until-done-isententered). 'weekday = scanText.nextLine();'대신'else'에서 단순히'continue'라고 말할 수 있습니다. –