Java for 循环

for循环可以重复执行一系列的操作,直到给定的条件为false时终止执行。简单示例如下:

for(int i=0; i < 10; i++) {

   System.out.println("i is: " + i);

}

这个例子是一个标准的Java for循环。在for关键字后面的圆括号()内,是用分号(;)分隔的三个语句。

第一个语句声明了一个名为i的int变量,并赋值为0.当for循环开始时,该语句只执行一次。

第二个语句将i变量的值与值10进行比较。如果i的值小于10,则for循环会再次执行一次。这个语句在for循环的在重复操作之前执行。

第三个语句使得i变量自增。在每次for循环的主体执行后,该语句也会执行一次。

上面显示的for循环的结果是循环的主体执行了10次。每次执行时i都小于10(0到9)。

上面例子中实际上并不需要for循环体的花括号。如果省略花括号,则只执行for循环语句之后的第一个Java语句。示例如下:

for(int i = 0; i < 10; i++)
    System.out.println("i is 1: " + i);  // 循环主体,会在循环内执行
    System.out.println("second line");   // 循环结束后执行

在这个例子中,在for循环中只执行第一个System.out.println()语句。第二个System.out.println()语句会直到for循环执行完成之后才会执行。

关于for循环常见的错误就是忘记循环体的花括号。因此,在for循环体首尾放置花括号内是一个好习惯。

循环初始化,循环条件和迭代后操作

如前所述,for循环包含三个用分号分隔的语句。示例如下:

for(int i=0; i < 10; i++) {

   System.out.println("I is: " + i);

}

这些语句在for循环的执行过程中起着不同的作用。它们分别是:

  1. 循环初始化
  2. 循环条件
  3. 迭代后操作

我将在下面更详细地解释这些。

循环初始化

循环初始化语句只在for循环开始之前执行一次。循环初始化语句通常用于初始化循环条件语句中使用的变量或对象。在上面的例子中,循环初始化语句声明了一个int变量 i并赋值为0。

for(int i=0; i < 10; i++) {

   System.out.println("i is: " + i);

}

如果你不需要循环初始化,也可以选择不写这部分语句。示例如下:

MyLoop loop = new MyLoop(10);

for( ; loop.loopAgain() ; loop.iterationDone()) {
}

注意如何使用一个对象来保持控制循环的状态。当然,这个对象可以在循环初始化语句中声明。我只是把它移到for循环外面以显示循环初始语句可以不写的情形。

你也可以在循环初始化语句中初始化多个变量。示例如下:

for(int i=0, n=10; i < n; i++) {

}

注意例子中是如何声明两个变量的。 i变量用作迭代计数器,n变量用作迭代边界。还要注意,循环条件现在是将变量i与变量n相比较,而不是与常量值进行比较。

循环条件

循环条件语句是for循环括号中的第二个语句。这个语句是一个表达式,其结果应该是true或者false。如果语句的计算结果为true,则for循环主体会再执行一次。如果语句的计算结果为false,则不会再执行for循环主体,执行跳转到for循环的主体之后的第一个语句。

for(int i=0; i < 10; i++) {

}

迭代后操作

for循环中的第三条语句是迭代后操作语句。这个语句在for循环的每次迭代之后执行。此语句通常用于更新控制循环条件的变量。例如,增加计数器变量。

for(int i=0; i < 10; i++) {

}

迭代后操作语句让变量i自增。在条件语句中,变量i与值10进行比较。如果i小于10,for循环会再次执行一次。

迭代后操作语句是可选的,就像循环初始化语句一样。下面是一个简单例子:

MyLoop loop = new MyLoop(10);

for( ; loop.loopAgain() ; )) {
}

Java for each 循环

在Java 5中增加了for循环的变体。这种变化被称为 for each 循环。示例如下:

String strings = {"one", "two", "three" };

for(String aString : strings) {
    System.out.println(aString);
}

注意上面的String数组,这个数组用于每个循环。注意在for循环的括号内声明了一个 String aString变量。对于for each循环的每次迭代,这个变量将被绑定到 strings数组中的一个String对象,而且该数组中的String对象会依次绑定一次。

for each循环的也可以用于泛型集合。详细内容请参看后续章节。

continue关键字

Java包含一个continue关键字,它可以在Java中用于 for(和while)循环。 continue关键字放在for循环体内。当continue命令被满足时,Java虚拟机跳转到循环的下一个迭代,而不执行continue后面的for循环体。 for循环体的下一次迭代将继续进行。如果该次迭代也符合continue命令,则该迭代也将跳到下一次迭代,依此类推。

下面是for循环中的一个简单的 continue示例:

String[] strings = {
    "John", "Jack", "Abraham", "Jennifer", "Ann" };

int wordsStartingWithJ = 0;
for(int i=0; i < strings.length; i++) {
    if(! strings[i].toLowerCase().startsWith("j")) {
        continue;
    }

    wordsStartingWithJ++;
}

注意for循环中的if语句。这个if语句用于检查字符串数组中的每个字符串是否以字母j开头。如果不是,则执行continue命令,for循环继续下一次迭代。

如果字符串数组中的当前字符串是以字母j开头,则会执行if语句后面的下一个Java语句,并且变量 wordsStartingWithJ将增加1。

continue命令也适用于for each循环。示例如下:

String[] strings = {
    "John", "Jack", "Abraham", "Jennifer", "Ann" };

int wordsStartingWithJ = 0;
for(String aString : strings) {
    if(! aString.toLowerCase().startsWith("j")) {
        continue;
    }

    wordsStartingWithJ++;
}

这两个for循环看起来有些不一样,但实际上逻辑和功能都是一样的。

break关键字

break命令是一个在for(和while)循环中使用的命令。当符合break命令的条件时,即使循环条件仍然为真,Java虚拟机也会跳出for循环。一旦符合break命令,就不会再执行for循环的迭代。示例如下:

String[] strings = {
    "John", "Jack", "Abraham", "Jennifer", "Ann" };

int wordsStartingWithJ = 0;
for(int i=0; i < strings.length; i++) {
    if(strings[i].toLowerCase().startsWith("j")) {
        wordsStartingWithJ++;
    }

    if(wordsStartingWithJ >= 3) {
        break;
    }

注意for循环中的第二个if语句,这个if语句检查找到以字母j开始的字符串数量大于等于3时,会执行break命令,程序跳出for循环。

像continue命令一样,break命令也适用于 for each循环。示例如下:

String[] strings = {
    "John", "Jack", "Abraham", "Jennifer", "Ann" };

int wordsStartingWithJ = 0;
for(String aString : strings) {
    if(aString.toLowerCase().startsWith("j")) {
        wordsStartingWithJ++;
    }

    if(wordsStartingWithJ >= 3) {
        break;
    }

}

for循环中变量可见性

在括号内或者在for循环主体中声明的变量只对for循环体中可见。对于for each循环的变量也是这样。看看下面这个Java for循环的例子:

for(int i=0; i<10; i++) {
    String iAsNo = String.valueOf(i);
}

变量i和iAsNo只在for循环体内可见。它们不能在for循环体外被引用。

对于下面for each示例中的aString变量也是这样:

String strings = {"one", "two", "three" };

for(String aString : strings) {
    System.out.println(aString);
}

由于是在for each循环的括号内声明的aString变量,因此该变量只在循环体内部可见。

下一篇: Java while循环

results matching ""

    No results matching ""