Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 404|回复: 0

[Java基础知识]java 循环语句

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-1 06:53:15 | 显示全部楼层 |阅读模式
    java 的循环语句有for,while 和 do-while 。这些语句创造了我们通常所称的循环(loops)。你可能知道,一个循环重复执行同一套指令直到一个结束条件出现。你将看到,Java 有适合任何编程所需要的循环结构。

    5.2.1 while 语句
    while 语句是Java 最基本的循环语句。当它的控制表达式是真时,while 语句重复执行一个语句或语句块。它的通用格式如下: while(condition) {
    // body of loop
    }
          条件condition 可以是任何布尔表达式。只要条件表达式为真,循环体就被执行。当条件condition 为假时,程序控制就传递到循环后面紧跟的语句行。如果只有单个语句需要重复,大括号是不必要的。  
      
            下面的while 循环从10开始进行减计数,打印出10行“tick”。 // Demonstrate the while loop.
    class While {
    public static void main(String args[]) {
    int n = 10;

    while(n > 0) {
    System.out.println("tick " + n);
    n--;
      }
    }
    }
      当你运行这个程序,它将“tick”10次: tick 10
    tick 9
    tick 8
    tick 7
    tick 6
    tick 5
    tick 4
    tick 3
    tick 2
    tick 1
      因为while 语句在循环一开始就计算条件表达式,若开始时条件为假,则循环体一次也不会执行。例如,下面的程序中,对println( ) 的调用从未被执行过: int a = 10, b = 20;  while(a > b)
    System.out.println("This will not be displayed");
      while 循环(或Java 的其他任何循环)的循环体可以为空。这是因为一个空语句(null statement) (仅由一个分号组成的语句)在Java 的语法上是合法的。例如,下面的程序: // The target of a loop can be empty.
    class NoBody {
    public static void main(String args[]) {
      int i, j; i = 100;
    j = 200;
      // find midpoint between i and j
    while(++i < --j) ; // no body in this loop
      System.out.println("Midpoint is " + i);
    }
    }
      该程序找出变量i和变量j的中间点。它产生的输出如下: Midpoint is 150  该 程序中的while 循环是这样执行的。值i自增,而值j自减,然后比较这两个值。如果新的值i仍比新的值j小,则进行循环。如果i等于或大于j,则循环停止。在退出循环前, i 将保存原始i和j的中间值(当然,这个程序只有在开始时i比j小的情况下才执行)。正如你看到的,这里不需要循环体。所有的行为都出现在条件表达式自身内 部。在专业化的Java 代码中,一些可以由控制表达式本身处理的短循环通常都没有循环体。 5.2.2 do-while 循环
    如你刚才所见,如果while 循环一开始条件表达式就是假的,那么循环体就根本不被执行。然而,有时需要在开始时条件表达式即使是假的情况下,while 循环至少也要执行一次。换句话说,有时你需要在一次循环结束后再测试中止表达式,而不是在循环开始时。幸运的是,Java 就提供了这样的循环:do-while 循环。do-while 循环总是执行它的循环体至少一次,因为它的条件表达式在循环的结尾。它的通用格式如下: do {
    // body of loop
    } while (condition);
      do-while 循环总是先执行循环体,然后再计算条件表达式。如果表达式为真,则循环继续。否则,循环结束。对所有的Java 循环都一样,条件condition 必须是一个布尔表达式。下面是一个重写的“tick”程序,用来演示do-while 循环。它的输出与先前程序的输出相同。 // Demonstrate the do-while loop.
    class DoWhile {
    public static void main(String args[]) {
    int n = 10;
      do {
    System.out.println("tick " + n);
    n--;
      } while(n > 0);
    }
    }
      该程序中的循环虽然在技术上是正确的,但可以像如下这样编写更为高效: do {
    System.out.println("tick " + n);
    } while(--n > 0);
      在本例中,表达式“-- n > 0 ”将n值的递减与测试n是否为0组合在一个表达式中。它的执行过程是这样的。首先,执行-- n 语句,将变量n递减,然后返回n的新值。这个值再与0比较,如果比0大,则循环继续。否则结束。 do-while 循环在你编制菜单选择时尤为有用,因为通常都想让菜单循环体至少执行一次。下面的程序是一个实现Java 选择和重复语句的很简单的帮助系统: // Using a do-while to process a menu selection
    class Menu {
      public static void main(String args[])
    throws java.io.IOException {
    char choice;
      do {
    System.out.println("Help on:");
    System.out.println(" 1. if");
    System.out.println(" 2. switch");
    System.out.println(" 3. while");
    System.out.println(" 4. do-while");
    System.out.println(" 5. for
    ");
    System.out.println("Choose one:");
    choice = (char) System.in.read();
      } while( choice < "1" || choice > "5");  System.out.println("
    ");  switch(choice) { case "1":
    System.out.println("The if:
    ");
    System.out.println("if(condition) statement;");
    System.out.println("else statement;");
      break; case "2":
    System.out.println("The switch:
    ");
    System.out.println("switch(expression) {");
    System.out.println(" case constant:");
    System.out.println(" statement sequence");
    System.out.println(" break;");
    System.out.println(" // ...");
    System.out.println("}");
    break;
      case "3":
    System.out.println("The while:
    ");
    System.out.println("while(condition) statement;");
    break;
      case "4":
    System.out.println("The do-while:
    ");
    System.out.println("do {");
      System.out.println(" statement;");
    System.out.println("} while (condition);");
    break;
    case "5":
    System.out.println("The for:
    ");
    System.out.print("for(init; condition; iteration)");
    System.out.println(" statement;");
    break;
      }
    }
    }
      下面是这个程序执行的一个样本输出: Help on: 1. if
    2. switch
    3. while
    4. do-while
    5. for
    Choose one:
    4
    The do-while:
    do { statement;
    } while (condition);
      在程序中,do-while 循环用来验证用户是否输入了有效的选择。如果没有,则要求用户重新输入。因为菜单至少要显示一次,do-while 循环是完成此任务的合适语句。 关 于此例的其他几点:注意从键盘输入字符通过调用System.in.read( ) 来读入。这是一个Java 的控制台输入函数。尽管Java 的终端 I/O (输入/输出)方法将在第12章中详细讨论,在这里使用System.in.read ( ) 来读入用户的选择。它从标准的输入读取字符(返回整数,因此将返回值choice 定义为字符型)。默认地,标准输入是按行进入缓冲区的,因此在你输入的任何字符被送到你的程序以前,必须按回车键。 Java 的终端输入功能相当有限且不好使用。进一步说,大多数现实的Java 程序和applets (小应用程序)都具有图形界面并且是基于窗口的。因此,这本书使用终端的输入并不多。然而,它在本例中是有用的。另外一点:因为使用 System.in.read ( ) ,程序必须指定throws java.io.IOException 子句。这行代码对于处理输入错误是必要的。这是Java 的异常处理的一部分,将在第10章讨论。 5.2.3 for 循环
    在第2章曾使用过一个for循环的简单格式。你将看到,for循环是一个功能强大且形式灵活的结构。下面是for 循环的通用格式: for(initialization; condition; iteration) {
    // body
    }
      如只有一条语句需要重复,大括号就没有必要。
      for循环的执行过程如下。第一步,当循环启动时,先执行其初始化部分。通常,这是设置循环控制变量值的一个表达式,作为控制循环的计数器。重要的是你要 理解初始化表达式仅被执行一次。下一步,计算条件condition 的值。条件condition 必须是布尔表达式。它通常将循环控制变量与目标值相比较。如果这个表达式为真,则执行循环体;如果为假,则循环终止。再下一步执行循环体的反复部分。这部 分通常是增加或减少循环控制变量的一个表达式。接下来重复循环,首先计算条件表达式的值,然后执行循环体,接着执行反复表达式。这个过程不断重复直到控制 表达式变为假。 下面是使用for 循环的“tick”程序: // Demonstrate the for loop.
    class ForTick {
    public static void main(String args[]) {
    int n;
      for(n=10; n>0; n--)
    System.out.println("tick " + n);
    }
    }
      在for 循环中声明循环控制变量 控制for循环的变量经常只是用于该循环,而不用在程序的其他地方。在这种情况下,可以在循环的初始化部分中声明变量。例如,下面重写了前面的程序,使变量 n 在for循环中被声明为整型: // Declare a loop control variable inside the for.
    class ForTick {
    public static void main(String args[]) {
      // here, n is declared inside of the for loop
    for(int n=10; n>0; n--)
    System.out.println("tick " + n);
    }
    }
      当你在for 循环内声明变量时,必须记住重要的一点:该变量的作用域在for语句执行后就结束了(因此,该变量的作用域就局限于for 循环内)。在for循环外,变量就不存在了。如果你在程序的其他地方需要使用循环控制变量,你就不能在for循环中声明它。 由于循环控制变量不会在程序的其他地方使用,大多数程序员都在for循环中来声明它。例如,以下为测试素数的一个简单程序。注意由于其他地方不需要i,所以循环控制变量i在for循环中声明。 // Test for primes.
    class FindPrime {
      public static void main(String args[]) {
    int num;
    boolean isPrime = true;
      num = 14;
      for(int i=2; i <= num/2; i++) { if((num % i) == 0) {
    isPrime = false;
    break;
      }
    }
    if(isPrime) System.out.println("Prime");
    else System.out.println("Not Prime");
      }
    }
      使用逗号 你可能经常需要在初始化和for循环的反复部分包括超过一个变量的声明。例如,考虑下面程序的循环部分: class Sample { public static void main(String args[]) {
    int a, b;
    b = 4;
    for(a=1; a<b; a++) {
      System.out.println("a = " + a);
    System.out.println("b = " + b);
    b--;
      }
    }
    }
      如 你所看到的,循环被两个相互作用的变量控制。由于循环被两个变量控制,如果两个变量都能被定义在for 循环中,而变量b不需要通过人工处理将是很有用的。幸好,Java 提供了一个完成此任务的方法。为了允许两个或两个以上的变量控制循环,Java 允许你在for 循环的初始化部分和反复部分声明多个变量,每个变量之间用逗号分开。 使用逗号,前面的for循环将更高效,改写后的程序如下: // Using the comma.
    class Comma {
    public static void main(String args[]) {
    int a, b;
      for(a=1, b=4; a<b; a++, b--) {System.out.println("a = " + a);System.out.println("b = " + b); }
    }
    }
      在本例中,初始化部分把两个变量a和 b都定义了。在循环的反复部分,用两个逗号分开的语句在每次循环重复时都执行。程序输出如下: a = 1
    b = 4
    a = 2
    b = 3
      注意:如果你对C/C++ 熟悉,你就会知道逗号是一个运算符,能在任何有效的表达 式中使用。然而,在Java 中不是这样。在 Java 中,逗号仅仅是一个分隔符,只 适用于for循环。 5.2.4 for 循环的一些变化
    for循环支持一些变化,这增加了它的功能和灵活性。for循环这样灵活是因为它的3部分(初始化部分,条件测试部分和反复部分)并不仅用于它们所限定的 那些目的。事实上,for 循环的3部分能被用于你需要的任何目的。让我们看一些例子。 最普通的变化之一包含在条件表达式中。具体地说,条件表达式可以不需要用循环变量和目标值的比较来测试循环条件。事实上,控制for 循环的条件可以是任何布尔表达式。例如,考虑下列程序片段: boolean done = false;  for(int i=1; !done; i++) { // ... if(interrupted()) done = true; }  在本例中,for循环将一直运行,直到布尔型变量done 被设置为真。for循环的条件部分不测试值i。 下面是for循环的另外一个有趣的变化。在Java 中可以使for循环的初始化、条件或者反复部分中的任何或者全部都为空,如下面的程序: // Parts of the for loop can be empty. class ForVar { public static void main(String args[]) { int i;  boolean done = false;  i = 0;  for( ; !done; ) { System.out.println("i is " + i); if(i == 10) done = true; i++;}} }  本 例中,初始化部分和反复部分被移到了for 循环以外。这样,for循环的初始化部分和反复部分是空的。当这个简单的例子中,for循环中没有值,确实,这种风格被认为是相当差的,有时这种风格也是 有用的。例如,如果初始条件由程序中其他部分的复杂表达式来定义,或者循环控制变量的改变由发生在循环体内的行为决定,而且这种改变是一种非顺序的方式, 这种情况下,可以使for 循环的这些部分为空。 下面是for 循环变化的又一种方式。如果for循环的三个部分全为空,你就可以创建一个无限循环(从来不停止的循环)。例如:
      for( ; ; ) {
    // ...
    }
    这个循环将始终运行,因为没有使它终止的条件。尽管有一些程序,例如操作系统命令处理器,需要无限循环,但大多数“无限循环”实际上是具有特殊终止要求的循环。在不久你将看到如何不用正常的条件表达式来终止这种类型的循环。 5.2.5 循环嵌套
    和其他编程语言一样,Java 允许循环嵌套。也就是,一个循环在另一个循环之内。例如,下面的程序就是循环嵌套: // Loops may be nested.
    class Nested {
    public static void main(String args[]) {
    int i, j;
      for(i=0; i<10; i++) {
    for(j=i; j<10; j++)
    System.out.print(".");
    System.out.println();
    }
    }
    }
      该程序产生的输出如下所示: . . . . . . . . . .
    . . . . . . . . .
    . . . . . . . .
    . . . . . . .
    . . . . . .
    . . . . .
    . . . .
    . . .
    . .
    .
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-6 06:11 , Processed in 0.411640 second(s), 46 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表