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

実際には、このように 2 つの 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の変数がすでに定義されているため、エラーが発生します。宣言を省略するか、ループを開始する前に宣言を初期化するように変更することができます。jlonglong j;long j = 3;

于 2012-04-21T21:08:24.343 に答える
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 に答える
0
int i = 0, j = 3; is the same thing as
int i = 0;
int j = 3;

したがって、実際には別の j 変数を作成しようとしています。コンマをセミコロンに置き換えることをお勧めします。

于 2012-04-22T17:54:10.780 に答える