ユーザーに1〜12の数値を要求すると、プログラムが対応する月を返すという問題があります。たとえば、ユーザーが数値「2」を入力すると、文字列「Feb」が出力されます。
私はこれを達成する方法を知っていますが、それを解決するためのより良い、より効率的な方法があるように感じます。私が考えていたのは、各数値(1〜12)に対して12個のifステートメントを作成し、その数値に応じて対応する月を印刷することです。
ユーザーに1〜12の数値を要求すると、プログラムが対応する月を返すという問題があります。たとえば、ユーザーが数値「2」を入力すると、文字列「Feb」が出力されます。
私はこれを達成する方法を知っていますが、それを解決するためのより良い、より効率的な方法があるように感じます。私が考えていたのは、各数値(1〜12)に対して12個のifステートメントを作成し、その数値に応じて対応する月を印刷することです。
Map
月番号でキー設定されたものを使用します。値には月の名前が含まれます。
Map<Integer, String> monthNames = new HashMap<Integer, String>();
monthNames.put(1, "January");
monthNames.put(2, "February");
...
int month = 3;
System.out.println(monthNames.get(month)); // prints March
またDateFormatSymbols
、月の名前を取得するためにを使用することを検討してください。Javaで整数をローカライズされた月の名前に変換するにはどうすればよいですか?を参照してください。
ハッシュテーブルを使用します。各キーがあなたの月のような要素を指しているところ。たぶん、あなたもあなた自身のハッシュ関数を構築することができます。O(n)ではなくO(1)アクセス時間である可能性があります。
Hashtable numbers = new Hashtable();
numbers.put("one", new Integer(1)); //String<-->Integer
numbers.put("two", new Integer(2));
numbers.put("three", new Integer(3));
Integer n = (Integer)numbers.get("two");
if (n != null) {
System.out.println("two = " + n);
}
You can change the key and element(in this example they are String and Integer) like this:
Hashtable<Integer, String> abc=new Hashtable<Integer, String>();
abc.put(new Integer(4), "hello");
ハッシュテーブルはキーとアイテムの両方でオブジェクトを受け入れるため、Objectを拡張する任意のクラスを使用できます。非常に柔軟です。ただし、オブジェクトで遊ぶとパフォーマンスが少し低下する可能性があります。「ベンチマーク」のようなことは何も言っていないので、これは友達かもしれません。
__________________________________________________________
| You can use Integer.valueOf() (available since Java 1.5) |
| instead of new Integer Credit to "Steve Kuo" |
switchステートメントを使用するのが方法です。さまざまなデータ構造を使用するより洗練された方法がありますが、入門コースにいることを考えると、データ構造を理解するのは難しいでしょう。
これを実現するには、配列を使用するだけです。
arr = {"january", "february"
// etc
}
構造体を使用していないのでswitchステートメントを使用できます。そうでない場合は、マップをお勧めしますが、最初はifステートメントの束のように感じられます。
int monthNumber;
String month;
switch(monthNumber){
case 1: month = "January";
break;
case 2: ...
}
多くの解決策:
Map
数字の1、2、3を「1月」、「2月」、「3月」などにマッピングします。0
文字列の配列を使用しますが、配列のインデックスは:で始まることに注意してください。String[] months = new String[] {"0 is no month", "Jan", "Feb", "Mar", ... };
これが1回だけ必要な場合は、スイッチ/ケースが最もきれいになります。
そのマップ月のようなマップを使用します。次に、months.get(i)を使用してMonthNameを取得します。
switchステートメントを使用することも、代わりにマップ、配列、リストなどのデータ構造を使用することもできます。
スイッチの例1:
public String getMonth(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";
}
}
スイッチの例2:
public String getCondition(int month)
{
String message = "";
switch (month)
{
case 1: message = "January";
break;
case 2: message = "February";
break;
case 3: message = "March";
break;
case 4: message = "April";
break;
case 5: message = "May";
break;
case 6: message = "June";
break;
case 7: message = "July";
break;
case 8: message = "August";
break;
case 9: message = "September";
break;
case 10: message = "October";
break;
case 11: message = "November";
break;
case 12: message = "December";
break;
default: message = "Invalid month";
}
}
これらの例を試してみてください。