0

ツェラーのアルゴリズムで曜日を見つけるのに問題があります。

1を13に、2を14に変換する必要があります。ただし、ローカル変数を複製するとエラーが発生します。この本は一時変数で変数を変更することを示していますが、Eclipseでは機能しません。エラーが表示されます。次に例を示します。

System.out.println("Enter a month 1-12: ");
int m = input.nextInt();
// Convert January to 13 and February to 14; Zeller's requirement
if (m == 1){
int temp = 13;
int m = temp;
}
else if (m == 2){
int temp = 14;
int m = temp;
}

}

Javaの入門書を始めたばかりですが、ここに簡単な解決策があるのではないでしょうか。

4

6 に答える 6

3

これはシンプルでスマートなソリューションです:

System.out.println("Enter a month 1-12: ");
int m = input.nextInt();
m = m + 12;

mまた、発生したエラーは、同じ名前の2つの変数()が原因でした。

Javaでは、1つのブロック内に同じ名前の2つの変数を含めることはできません。

于 2012-12-07T10:25:20.090 に答える
1

これを試してみてください。int mすでに宣言され、初期化されたコードを次のように再度宣言する必要はありません。int m = input.nextInt();

System.out.println("Enter a month 1-12: ");
int m = input.nextInt();
// Convert January to 13 and February to 14; Zeller's requirement

if (m == 1){
int temp = 13;
m = temp;
}
 else if (m == 2){
int temp = 14;
 m = temp;
于 2012-12-07T10:23:37.013 に答える
1

ifelse条件の外で変数tempとmを宣言します。変数が2回宣言されているようです。

于 2012-12-07T10:23:49.197 に答える
1

他の答えは正しいですが(変数が使用される場所について考える必要があり、そのint前の最初の作成場所でのみ、さらに使用したい場合は、「変数のスコープ」を読んでください)。

変数の再利用に対する追加のヒントを提供したいと思います。たとえば、次のようにすることができます。

System.out.println("Enter a month 1-12: ");
int inputMonth = input.nextInt();

// This will hold our result.
int convertedMonth; 
// Convert January to 13 and February to 14; Zeller's requirement
if (inputMonth == 1){
   convertedMonth = 13;
}
else if (inputMonth == 2){
   convertedMonth = 14;
}
else{
   convertedMonth = inputMonth;
}

このように、変数の名前は常に変数に何が格納されているかを示します。mある時点でユーザー入力があり、後で変換された入力があるのとは対照的です。(私の例の最後の他の代わりに、すぐにデフォルトのを設定することから始めることを決定できますconvertedMonth

int convertedMounth = inputMonth;
于 2012-12-07T10:32:07.000 に答える
0

if/elseステートメント内のmに対応するintキーワードをスキップするだけです。

于 2012-12-07T10:26:21.987 に答える
0

コード内で同じ名前の変数を複数回宣言することはできません。宣言して割り当てる値を割り当てる代わりに、「m」を何度も宣言しています。今後、このタイプのエラーを回避してください。

于 2012-12-07T10:31:51.240 に答える