0

我正在用 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 入门书籍,也许这里有简单的解决方案?

4

6 回答 6

3

这是一个简单而智能的解决方案:

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

此外,您得到的错误是因为两个变量 ( m) 具有相同的名称。

在 Java 的一个块中不能有两个同名的变量。

于 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

在 if else 条件之外声明变量 temp 和 m。似乎该变量被声明了两次。

于 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在某些时候具有用户输入,然后具有转换后的输入相反。(而不是我示例中的最后一个 else,您可以决定通过立即设置默认值来开始convertedMonth

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

您不能在代码中多次声明具有相同名称的变量。您一次又一次地声明“m”,而不是在其中分配值,而是在声明和分配 . 以后避免此类错误。

于 2012-12-07T10:31:51.240 回答
0

只需在 if/else 语句中跳过对应于 m 的int关键字。

于 2012-12-07T10:26:21.987 回答