2016-06-29 6 views
0

は、このコードを書くための「ちょっとした」方法がありますか?私はシンプルさのための執拗な者です、そして、これは私にとってはやや反復的なようです。 (誰かが不思議に思っていたら、if文で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値をマッピングしているので。あなたは以下のように書くことができます(1つの欠点あなたが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

私はそれについて疑問を抱いていました。どうすればelseの後の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)Elliottの答えです。 'weekday = scanText.nextLine();'の代わりに、単に 'else'で' continue'と言うことができます。 –