0

ユーザーに1〜12の数値を要求すると、プログラムが対応する月を返すという問題があります。たとえば、ユーザーが数値「2」を入力すると、文字列「Feb」が出力されます。

私はこれを達成する方法を知っていますが、それを解決するためのより良い、より効率的な方法があるように感じます。私が考えていたのは、各数値(1〜12)に対して12個のifステートメントを作成し、その数値に応じて対応する月を印刷することです。

4

8 に答える 8

3

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で整数をローカライズされた月の名前に変換するにはどうすればよいですか?を参照してください。

于 2012-09-05T20:10:19.067 に答える
2

ハッシュテーブルを使用します。各キーがあなたの月のような要素を指しているところ。たぶん、あなたもあなた自身のハッシュ関数を構築することができます。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"           |
于 2012-09-05T20:10:36.723 に答える
2

switchステートメントを使用するのが方法です。さまざまなデータ構造を使用するより洗練された方法がありますが、入門コースにいることを考えると、データ構造を理解するのは難しいでしょう。

于 2012-09-05T20:10:51.523 に答える
1

これを実現するには、配列を使用するだけです。

arr = {"january", "february"
// etc
}
于 2012-09-05T20:11:42.773 に答える
1

構造体を使用していないのでswitchステートメントを使用できます。そうでない場合は、マップをお勧めしますが、最初はifステートメントの束のように感じられます。

int monthNumber;
    String month;
    switch(monthNumber){
        case 1: month = "January";
                break;
        case 2: ...
    }
于 2012-09-05T20:13:28.660 に答える
1

多くの解決策:

  • Map数字の1、2、3を「1月」、「2月」、「3月」などにマッピングします。
  • 0文字列の配列を使用しますが、配列のインデックスは:で始まることに注意してください。String[] months = new String[] {"0 is no month", "Jan", "Feb", "Mar", ... };
  • switch/caseステートメントを使用する

これが1回だけ必要な場合は、スイッチ/ケースが最もきれいになります。

于 2012-09-05T20:14:35.300 に答える
0

そのマップ月のようなマップを使用します。次に、months.get(i)を使用してMonthNameを取得します。

于 2012-09-05T20:11:47.407 に答える
0

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";
    }
}

これらの例を試してみてください。

于 2012-09-05T21:09:03.100 に答える