2012-04-21 3 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

は、次の2つのj個の変数をこのように宣言する効果です。あなたの解決策は、ループ内でjを再宣言するのではなく、ループの前に一度宣言するか、forループの初期条件でintとして宣言することです。たとえば、あなたが試すことができます:

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

はloop..Thanks – Stacker

+0

@Stacker用とラインで発生しました:あなたは非常に歓迎しています! –

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

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を作成しようとしています。既にlongタイプのjという変数が定義されています。したがって、エラーです。ループが始まる前に、long j;宣言を省略するか、それを初期化するためにlong j = 3;にそれを変更する場合があります。

+0

良い答え、1 + –

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

他の変数を実際に作成しようとしています。 カンマをセミコロンに置き換えることをお勧めします。エラーうん

関連する問題