编译错误:j已在main(java.lang.String [])中定义

时间:2012-04-21 21:02:17

标签: java

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

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 个答案:

答案 0 :(得分:6)

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

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

答案 1 :(得分: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的{​​{1}}类型的变量,因此出现了错误。您可以省略long声明,或将其更改为long j;以在循环开始之前初始化它。

答案 2 :(得分: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

答案 3 :(得分:0)

int i = 0, j = 3; is the same thing as
int i = 0;
int j = 3;

所以你实际上是在尝试创建另一个j变量。 我建议用分号替换逗号。