-1

私は次のクラスを書きました:

  public class TestOne {
     public static void main(String[] args) {
        int count = 0;
        for (int i = 0; i < 100; i++) {
          count++;
        }
        System.out.println(count);
     }
   }

出力は100です。

次に、セミコロンを追加しました。

    public class TestOne {
     public static void main(String[] args) {
        int count = 0;
        for (int i = 0; i < 100; i++); {     // <-- Added semicolon
          count++;
        }
        System.out.println(count);
     }
   }

出力は1です。

結果は信じられないほどです。この追加されたセミコロンによって、プログラムの意味が劇的に変わるのはなぜですか?

4

6 に答える 6

8

セミコロンは for ループの本体を空にします。これは以下と同等です:

public class TestOne {
     public static void main(String[] args) {
        int count = 0;

        for (int i = 0; i < 100; i++) { }

        count++;
        System.out.println(count);
     }
   }
于 2012-08-28T04:38:06.507 に答える
7

これはバグではありません。forセミコロンは、ループの本体で唯一の「ステートメント」になります。

見やすくするために、これを別の方法で書きます。

for (int i = 0; i < 100; i++)
    ;

{
    count++;
}

のブロックは、セミコロンがあるためcount++、ループにまったく関連付けられていない単一のステートメントを含むむき出しのブロックになります。forしたがって、このブロックとその中の は一度count++だけ実行されます。

これは構文的に有効な Java です。for (int i = 0; i < 100; i++);次と同等です。

for (int i = 0; i < 100; i++)
{ ; } // no statement in the body of the loop.

forこの形式のループは、ループのインクリメント ステートメントまたは終了条件内の副作用のために役立ちます。たとえば、indexOfSpacea 内のスペース文字の最初のインデックスを見つけるために独自に記述したい場合String:

int idx;

// for loop with no body, just incrementing idx:
for (idx = 0; string.charAt(idx) != ' '; idx++);

// now idx will point to the index of the ' '
于 2012-08-28T04:39:41.090 に答える
3

そのセミコロンを追加することにより、ループするブロックなしで for ステートメントを宣言します。

これによりcount++、ループされたときに 100 回ではなく、渡されたときに 1 回だけ実行されます。

于 2012-08-28T04:38:49.520 に答える
1

そのセミコロンを使用すると、for ループ ブロックが終了し、内部に命令がないことを示しています。

次に、カウントを1回だけインクリメントします。これが出力が1である理由です

public class TestOne {
     public static void main(String[] args) {
        int count = 0;
        for (int i = 0; i < 100; i++)  ; 

        {
          count++;
        }
        System.out.println(count);
     }
   }
于 2012-08-28T04:40:17.627 に答える
1

セミコロンは空のステートメントであり、有効なステートメントです。現在のループはその「空のステートメント ( ) のみに作用しているため、ループに関して;は何の変化も見られません。count

ループの後、ステートメントcount++は 1 回実行されるため、結果は '1' になります。ループの本体が using で指定されていない場合、ループ{ }の後の最初のステートメントはループの一部と見なされます。2番目のケースでは、空のステートメントです。

以下と同等です。

for (int i = 0; i < 100; i++) 
      { 
       ; //any empty valid statement
      }

count++;
于 2012-08-28T04:42:11.557 に答える
0

反復終了後、カウント値をインクリメントしています

for ループの後、セミコロンを使用しているため、for ループは終了します

for (int i = 0; i < 100; i++);

{カウント++; }

count incremental が for ループにありません。ループの外にあります。

于 2012-08-28T04:38:16.970 に答える