1

ユーザーの入力に応じてカレンダーをインスタンス化するにはどうすればよいですか? 私はもう試した:

Calendar cal = new GregorianCalendar(2011, Calendar.t.getMonth(month), 1);

しかし、トリックはしませんでした。

import java.util.GregorianCalendar;
import java.util.Calendar;
import java.util.Scanner;

public class Test {
    public static void main(String[] args){
        Test t = new Test();
        Scanner sc = new Scanner(System.in);

        System.out.print("Enter a month: ");
        String month = sc.next();

        Calendar cal = new GregorianCalendar(2011, Calendar.JANUARY, 1);

        int days = cal.getActualMaximum(Calendar.DAY_OF_MONTH);
        System.out.print("There are "+days+" days in "+month+".");
    }
    private String getMonth(String month){
        return month;
    }
}

それとももっと実用的な方法でしょうか?ありがとう。

4

4 に答える 4

2

月は 1 ではなく 0 から始まるため、月に 1 を追加する必要があります。

int month = sc.nextInt();
Calendar cal = new GregorianCalendar(2011, month + 1, 1);

または、ユーザーに数値ではなく文字列を挿入させたい場合は、次のようにすることができます。

String month = sc.nextLine();
int iMonth = -1;
if(month.equalsIgnoreCase("January"))  iMonth = 0;
else if(month.equalsIgnoreCase("February")) iMonth = 1;
// and so on ...
Calendar cal = new GregorianCalendar(2011, iMonth, 1);
于 2011-11-21T13:08:12.820 に答える
1

ネイティブ Java GregorianCalendar の代わりにJoda Timeを使用します。はるかに良いです!

 // From Joda Time documentatio
 // setup date object for midday on Christmas 2004
 Chronology chrono = GregorianChronology.getInstance();
 DateTime dt = new DateTime(2004, 12, 25, 12, 0, 0, 0, chrono);
于 2011-11-21T13:14:44.697 に答える
0

すべての列挙型に対して、Java には、String を適切な列挙型に変換する valueOf(String) 静的関数があります。残念ながら、Calendar.JANUARY などの Calendar クラスの定数は定数であり、enum ではありません。月の名前で列挙型を作成し、それらの月を Calendar 定数に接続し、ユーザーの入力を大文字にした後、valueOf 関数を使用するのが最善の方法です。

コード付き:

public enum Months {

    JANUARY (0),
    FEBRUARY (1),
    MARS (2) // and so on

    private int value;

    test(int value){
        this.value = value;
    }
}

そして、あなたのクラスには、次のような関数があります:

private int monthFromString(String userInputMonth) {
   return Months.valueOf(userInputMonth);
}
于 2011-11-21T13:08:27.220 に答える
0

GregorianCalendar is not meant to be instantiated directly (read the javadocs), use Calendar.getInstance() instead, and assign values with set(int...) methods.

于 2011-11-21T13:19:39.213 に答える