2012-04-21 84 views
3

我試圖編譯下面的代碼:編譯錯誤:j是主已經定義(java.lang.String中[])

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 is already defined in main(java.lang.String[])

錯誤發生在與for循環一行。這是如何造成的,我該如何解決這個問題?

回答

6

您實際上是這樣聲明瞭兩個j變量。你的解決方案是不在循環中重新聲明j,而是在循環之前將它聲明爲一次,或者在for循環初始條件中將其作爲int聲明一次(如你所做的那樣)。例如,您可以嘗試:

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

是的錯誤發生在循環線...謝謝 – Stacker 2012-04-21 22:01:40

+0

@Stacker:你很歡迎! – 2012-04-21 22:07:47

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

+0

你現在我明白了。謝謝DOcJones – Stacker 2012-04-21 22:03:47

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++; 
} 

本質上講,你正試圖創建int類型是本地環路的新變量j。已經有一個名爲j的變量定義了long類型,因此是錯誤的。您可以省略long j;聲明,或將其更改爲long j = 3;以在循環開始之前對其進行初始化。

+0

很好的答案,1+ – 2012-04-21 21:09:18

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

所以你實際上試圖創建另一個j變量。 我建議用分號替換逗號。

相關問題