我在使用Zeller的算法找到一周中的某一天时遇到了问题。
我必须将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的入门书,也许这里有简单的解决方案?
答案 0 :(得分:3)
这是一个简单而明智的解决方案:
System.out.println("Enter a month 1-12: ");
int m = input.nextInt();
m = m + 12;
你得到的错误也是因为两个变量(m
)具有相同的名称。
在Java中的单个块中不能有两个具有相同名称的变量。
答案 1 :(得分: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;
答案 2 :(得分:1)
在if else条件之外声明你的变量temp和m。 似乎变量被声明了两次。
答案 3 :(得分: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;
答案 4 :(得分:0)
在if / else语句中跳过与m对应的 int 关键字。
答案 5 :(得分:0)
您不能在代码中多次声明具有相同名称的变量。你一次又一次地声明“m”而不是在你声明和分配中赋值。将来要避免这种错误。