0

私は Java の完全な初心者であり、読んだ資料のいくつかを確認するために簡単なテスト プログラムを作成しています。次のコード ブロックは正しく動作しません。ユーザーから年、月、日を受け取り、年、月、日で初期化された GregorianCalendar オブジェクトを作成することになっています。ただし、GregorianCalendar 変数の月を返そうとすると、月の変数を初期化した月が常に返されます。理由はわかりません。

import java.util.*;
public class Prac {
    public static void main(String[] args){
    Scanner input = new Scanner(System.in);
    System.out.print("Enter Year: ");
    int YEAR = input.nextInt();
    System.out.print("Enter Month: ");
    String MONTH_STRING = input.next();
    System.out.print("Enter Date: ");
    int DATE = input.nextInt();
    int MONTH = 10;
    String mon = MONTH_STRING.toLowerCase();

    if (mon == "january") {
        MONTH = 0;
    } else if (mon == "february") {
        MONTH = 1;
    } else if (mon == "march") {
        MONTH = 2;
    } else if (mon == "april") {
        MONTH =3;
    } else if (mon == "may"){
        MONTH =4;
    } else if (mon == "june"){
        MONTH =5;
    } else if (mon == "july"){
        MONTH =6;
    } else if (mon == "august"){
        MONTH=7;
    } else if (mon == "september"){
        MONTH=8;
    } else if (mon == "october"){
        MONTH=9;
    } else if (mon == "november"){
        MONTH=10;
    } else if (mon == "december"){
        MONTH =11;
    }

    GregorianCalendar entDate = new GregorianCalendar(YEAR,MONTH,DATE);
    System.out.println(entDate.get(Calendar.MONTH));
    }
}

また、switch ブロックを使用できたことは承知していますが、どういうわけか奇妙なエラーが発生しました。

4

2 に答える 2

2

String.equals

文字列を間違って比較しています。

==オペレーターは、オブジェクトが同じかどうかを確認します。つまり、同じメモリ位置とすべてのものを意味します。

やりたいことはString::equals方法です。

if(mon.equals("january") {
    ...
} else if(mon.equals("feburary") {
    ...
} ...

これは、文字列の値が等しいかどうかのみをチェックします。

また、Java 1.7 以降を使用していない限り、文字列のスイッチ ケースを使用することはできません。質問の一部ではありませんが、それでも知っておくとよいでしょう。

于 2012-09-05T19:48:51.750 に答える