3

我正在尝试编译以下代码:

class Looping {
    public static void main(String ar[]) {
        long j;
        for (int i = 0, j = 3; i <= 10; i++, j++) {
            System.out.println(j);
        }
    }
}

我收到以下编译错误:

j 已经在 main(java.lang.String[]) 中定义

错误发生在for循环所在的行。这是如何引起的,我该如何解决?

4

4 回答 4

6

您实际上是以这种方式声明了两个 j 变量。您的解决方案是不在循环中重新声明 j ,而是在循环之前将其声明为 long ,或者在 for 循环初始条件中将其声明为 int (正如您所做的那样)。例如,您可以尝试:

  long j = 3;
  for (int i = 0; i <= 10; i++, j++) {
     System.out.println(j);
  }
于 2012-04-21T21:04:30.933 回答
5

当你写:

long j;
for(int i=0, j=3;i<=10;i++,j++)
{
    System.out.println(j);
}

这基本上相当于:

long j;
int i = 0, j = 3;
while (i <= 10)
{
    System.out.println(j);
    i++, j++;
}

本质上,您正在尝试创建一个新j的类型变量,int该变量是循环本地的。已经定义了一个名为j类型的变量long,因此出现错误。您可以省略long j;声明,或将其更改为long j = 3;以在循环开始之前对其进行初始化。

于 2012-04-21T21:08:24.343 回答
0
int i = 0, j = 3; is the same thing as
int i = 0;
int j = 3;

因此,您实际上是在尝试创建另一个 j 变量。我建议用分号替换逗号。

于 2012-04-22T17:54:10.780 回答
0

任何一个:

class Looping {
    public static void main(String ar[]) {
      for(int i=0, j=3;i<=10;i++,j++) {
        System.out.println(j);
      }
    }
}

或者:

class Looping {
    public static void main(String ar[]) {
       long j=3;
       for(int i=0;i<=10;i++,j++) {
        System.out.println(j);
      }
    }
}

说明:代码示例中的逗号 (,)int i=0不算作语句分隔符,但有效地告诉编译器:Define an integer i with value 0 AND a integer J with value 3

于 2012-04-21T21:07:58.413 回答