posts - 24,  comments - 29,  trackbacks - 0
 

        Java语言同其它大多数的编程语言一样,也存在有控制循环的编程结构,它分为不确定循环和确定循环两种类型。

一、不确定循环

        所谓不确定循环,也就是我们不能确定循环所要执行的次数,执行的次数是根据程序中参数的变化自动控制的。

        它主要有两种表现形式:第一种形式是while形式,第二种形式是do/while形式。

       1) while

       它的英语意思就是“当”,它在循环控制中也可以这样理解,它的语法格式是:

while(条件)

{

 目的一;

 目的二;

……

}

        换成中文的含义就是“当条件为真时,就执行循环体,当条件为假时,就不执行循环体。”

        下面我们编写一个比较有意思的程序来说明这个结构:

        我的同事小李自从参加工作以后,每个月都要交纳一定的住房基金,以准备买房子。现在他每个月工资是2000元,以后每年按10%的比例增加,其中工资的5%是用来交纳住房基金的,他想知道多少年后,他可以有20万元住房基金。

/*while循环控制结构的测试*/

public class BuyHouse

{

 public static void main(String[] args)

 {

   final double HOUSEFUND = 200000;

   double salary = 2000;

   double fund = 0;

   int years = 1;

 while(fund < HOUSEFUND)

     {

      fund += salary * 0.05 * 12;

      years++

      salary = salary * 1.1;

     }

   System.out.println(“the total years is :” + years);

   System.out.println(“the total fund is :” + fund);

 }

}

输出结果:the total years is :32

          The total fund is :218332.10994930082

程序分析:

        在开始的时候,我们并不知道需要多少年,但我们知道它的结束条件,那就是基金需要达到20万元。我们以它作为程序结束的条件,进行循环。通过这个程序我们可以总结出以下几点:

       1、循环开始执行的条件是为真;

       2、必须要有使程序结束的自变量在变化;

       3、循环判断条件为假时,程序中止循环。

 

2)do/while

我们先把前面的程序做一个改造,来比较一下两个程序的区别:

/*while循环控制结构的测试*/

public class BuyHouse2

{

 public static void main(String[] args)

 {

    final double HOUSEFUND = 200000;

    double salary = 2000;

    double fund = 0;

    int years = 1;

    do

    {

      fund += salary * 0.05 *12;

      years++;

      salary = salary * 1.1;

    }

    while(fund < HOUSEFUND);

    System.out.println(“the total years is :” + years);

    System.out.println(“the total fund is:” + fund);

 }

}

输出结果:the total years is :32

          the total fund is :218332.10994930082

我们再看两个小程序,并对比一下他们的输出:

/*测试不确定循环的两种表现形式的区别*/

public class DifferTest

{

public static void main(String[] args)

{

 int i = 2;

 do

 {

   i++;

   System.out.println(“the value I is:” + i);

 }

while(I < 2);

}

}

输出结果:the value i is:3

 

/*测试不确定循环的两种表现形式的区别*/

public class DifferTest2

{

public static void main(String[] args)

{

 Int i = 2;

 while (i < 2)

 {

   i++;

   System.out.println(“the value I is:” + i);

 }

}

}

         这个没有任何输出结果,这两种形式是有一定差别的:while语句是先进行条件判断,再进行循环体的处理;do/while语句是先进行循环体的处理再判断条件语句,也就是在执行判断之前已经将循环体内的逻辑处理了一遍。

 

二、确定循环

         for()循环是最简单的循环语句,它可以通过计数器或在每次循环后修改某个类似于计数器变量的值来控制它。它的格式如下:

for(初始化表达式;判断表达式;递增(或递减)表达式)

{

执行语句;

}

        初始化表达式:它是用来设定循环控制变量的初始值,也就是循环的起点。

       判断表达式:用来判断循环是否结束的表达式,也就是循环的终点。程序循环是否持续进行由判断表达式决定;通常判断表达式是关系表达式,当关系表达式的值为真是,程序继续进行循环,当关系表达式的值为假时,循环结束。

       递增(递减)表达式:是循环控制变量的递增,也可以是递减。它又称为循环控制的步长,也就是每次循环,循环变量增长(或减少)的速度。

        for()语句的最后不能有任何符号,需要特别注意。

例如:我们向控制台输出1到10之间的数字。

/*输出数字到控制台*/

Public class Circle

{

 Public static void main(String[] args)

 {

   For(int I = 1; I < 10; i++)

   {

     System.out.println(“ ” + i);

   }

 }

}

输出结果:1 2 3 4 5 6 7 8 9 10

        针对于for()循环控制结构,有以下问题请读者注意:

        1、如果在初始化表达式定义了一个初始化变量,那么该变量的作用域范围是从循环开始到循环结束;

        2、如果想在循环体外部使用循环计数器的最终结果,应该在循环开始外就声明。

        3、在同级别的不同for()循环中,可以定义相同名字的变量。

        4、在被包含的for()循环块内不可以定义相同名字的变量。

        5、for()循环与while循环是完全等价的。

 

三、逗号运算符

在Java中逗号运算符的惟一使用场所就是for循环,在初始化循环变量表达式或递增(递减)表达式中,我们用一系列逗号分隔不同的语句,这些语句均参与到循环控制中。

下面用一个程序说明这个问题

/*逗号运算符*/

public class CommaOperator

{

 public static void main(String[] args)

 {

   for(int i = 1, j = i + 10; i < 5; i++, j = i * 3)

   {

    System.out.println(“i =” + i + “; j =” + j);

   }

 }

}

输出结果:

         i = 1; j = 11

         i = 2; j = 6

         i = 3; j = 9

         i = 4; j = 12

        通过这个示例,读者可以发现初始化变量在开始的时候都是按照初始化表达式进行的,在运算的过程中,都按照步长控制表达式进行。

 

四、无限循环

        提到无限循环,也就是指没有判断表达式的for循环,当程序进入到循环体内的时候,由于没有判断表达式来结束正常的循环,使得程序进入到无限循环中,也就是我们平常说的死循环。

我们通过一个小例子来了解一下无限循环的表现形式:

/*无限循环控制*/

public class Unlimited

{

 public static void main(String[] args)

 {

 for(int i = 1;; i++)

 {

   System.out.println(“i =” + i);

 }

}

}

        如果程序进入到无限循环中,程序就不能正常结束了,我们只有手动结束程序的进程。手动结束进程的快捷键是Ctrl+C。

posted on 2007-05-16 15:37 心随Wǒ动 阅读(1405) 评论(2)  编辑  收藏

FeedBack:
# re: 循环
2007-05-16 15:44 | 我心依旧
^_^for循环你学会了嘛?  回复  更多评论
  
# re: 循环
2007-05-16 22:37 | asdf
还有foreach循环=.=,不过感觉像遍历了  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航:
 
<2007年5月>
293012345
6789101112
13141516171819
20212223242526
272829303112
3456789

QQ群:9028409
QQ:29850994
点击这里给我发消息

留言簿(2)

随笔档案

积分与排名

  • 积分 - 30802
  • 排名 - 1350

最新评论

阅读排行榜

评论排行榜