for 循环与while循环的区别

 语句的表达方式不一样,但是一定程度上可以互相改写的.
但是一般来说for用于次数一定的循环,while用于次数未知的循环

 

循环结构是指在满足循环条件时反复执行循环代码代码块,直到循环条件不能满足为止。一个循环语句一般应包含4个部分的内容:
    初始化部分:设置循环控制的一些初始条件
    循环体部分:反复执行的代码
    迭代部分:修改循环控制条件
    判断部分:判断是否继续循环执行体

while循环
    格式如下:
        初始化部分;
        while(判断部分){
            循环体部分;
            迭代部分;
        }
    其中初始化部分和迭代部分可以没有。如果有初始化部分,程序先执行初始化部分,再执行判断部分,如果为真值,则执行红色显示的部分(即执行循环体部分,如果有迭代部分,执行迭代部分),然后再执行判断部分,如果为真值,再执行红色显示的部分,直至判断部分运算的结果为假值结束循环。请看程序示例一:
public class WhileDemo {
public static void main(String[] args) {

String copyFromMe = "Copy this string until you " +
"encounter the letter 'g'.";
StringBuffer copyToMe = new StringBuffer();

int i = 0;
char c = copyFromMe.charAt(i);

while (c != 'g') {
copyToMe.append(c);
c = copyFromMe.charAt(++i);
}
System.out.println(copyToMe);
}
}//这个方法说明了字符串可以任意拆开,并且再进行组合。
    程序示例一
    关于该程序的详细执行过程以及详细的注释,请选择代码分析窗口。
    源程序分析:程序的主要功能是将字符串copyFromMe中的第1个字符到字符'g‘,赋给字符串copyToMe。蓝色显示的语句是得到一个空的StringBuffer,StringBuffer和String的区别在于StringBuffer的长度可以变化,即可以向其中加入或删除字符,但字符串的效率较高,StringBuffer和String的概念还要在下一章进一步澄清。红色显示的表达式的运算结果是字符'C',即字符串copyFromMe的第0个字符。绿色显示的语句是向字符串缓冲区的尾部添加一个字符,即变量c的值。

do-while循环
    格式如下:
        初始化部分;
        do{
            循环体部分;
            迭代部分;
        }while(判断部分)
    其中初始化部分和迭代部分可以没有。如果有初始化部分,程序先执行初始化部分,再执行红色显示的部分(即执行循环体部分,如果有迭代部分,执行迭代部分),然后再执行判断部分,如果为真值,执行红色显示的部分,一直到判断部分的结果为假值结束循环。do-while循环与while循环的区别在于do-while循环先执行一遍红色显示的部分,再运算判断部分,根据其结果来判断是否结束循环,所以红色显示的部分至少执行一遍,而while循环先运算判断部分,所以有可能红色显示的部分还没有执行就结束了。请看程序示例二:
public class DoWhileDemo {
public static void main(String[] args) {

String copyFromMe = "Copy this string until you " +
"encounter the letter 'g'.";
StringBuffer copyToMe = new StringBuffer();

int i = 0;
char c = copyFromMe.charAt(i);

do {
copyToMe.append(c);
c = copyFromMe.charAt(++i);
} while (c != 'g');
System.out.println(copyToMe);
}
}
程序示例二
    关于该程序的详细执行过程以及详细的注释,请选择代码分析窗口。
    源程序分析:红色显示的语句功能已经在前面的例子中已经澄清

for循环
    for循环是使用最广泛的一种循环结构,格式如下:
        for(初始化部分;判断部分;迭代部分;){
            循环体部分;
        }
    其中初始化部分可以没有,如果有初始化部分,首先执行初始化部分,然后执行判断部分,如果结果为真值,执行循环体部分,最后执行迭代部分。完成一次循环后,再执行判断部分,直到其结果为假值 。
结束循环。for循环通常用于循环次数可以确定的情况,也可用于不确定的情况。注意:初始化部分和迭代部分可以使用逗号来分隔多个语句,如下所示:
    for(int i=0,int j=0;i<j;i++,j--){......}
    请看程序示例三
public class ForDemo {
public static void main(String[] args) {
int[] arrayOfInts = { 32, 87, 3, 589};

for (int i = 0; i < arrayOfInts.length; i++) {
    System.out.print(arrayOfInts[i] + " ");
}
System.out.println();
}
}


程序示例三
    关于该程序的详细执行过程以及详细的注释,请选择代码分析窗口。
    源程序分析:该程序的功能是在控制台上显示一个数组的全部元素。红色显示的语句是定义一个int型数组变量arrayOfInts,即数组的每个元素是int型数据,同时给arrayOfInts赋初值。蓝色显示的表达式得到arrayOfInts的长度,即它的元素个数,在这里为4。绿色显示的表达式是得到arrayOfInts元素的值,i是索引值,例如当i等于0时,arrayOfInts[i]的值是32。
    在以上循环的执行过程,通过break语句和continue语句可以结束循环体部分的执行
 

break语句
    break语句的功能是结束整个循环结构的执行,从紧跟循环结构的第一条语句始执行。请看程序示例四:
public class BreakDemo {
public static void main(String[] args) {

int[] arrayOfInts = { 32, 87, 3, 589, 12, 1076,2000, 8, 622, 127 };
int searchfor = 12;

int i = 0;
boolean foundIt = false;

for ( ; i < arrayOfInts.length; i++) {
if (arrayOfInts[i] == searchfor) {
foundIt = true;
break;
}
}

if (foundIt) {
System.out.println("Found " + searchfor + " at index " + i);
} else {
System.out.println(searchfor + "not in the array");
}
}
}
    程序示例四
    关于该程序的详细执行过程以及详细的注释,请选择代码分析窗口。
    在程序示例四中,break语句是结束内层循环,即跳出里面的花括号,事实上,可以用"标签化中断"语句跳出任意的嵌套的花括号中的代码块,请看程序示例五:
public class BreakWithLabelDemo {
public static void main(String[] args) {

int[][] arrayOfInts = { { 32, 87, 3, 589 },
{ 12, 1076, 2000, 8 },
{ 622, 127, 77, 955 }
};
int searchfor = 12;

int i = 0;
int j = 0;
boolean foundIt = false;

search:
for ( ; i < arrayOfInts.length; i++) {
for (j = 0; j < arrayOfInts[i].length; j++) {
if (arrayOfInts[i][j] == searchfor) {
foundIt = true;
break search;
}
}
}

if (foundIt) {
System.out.println("Found " + searchfor + " at " + i + ", " + j);
} else {
System.out.println(searchfor + "not in the array");
}

}
}
程序示例五
    关于该程序的详细执行过程以及详细的注释,请选择代码分析窗口。
    源程序分析:红色显示的语句是"标签化中断"语句,它的功能是跳到标签search(蓝色显示)处的语句的下一条语句开始执行。绿色显示的语句是定义一个二维数组,二维数组是指它的每个元素是一个数组,在这里它的第0个元素是数组{ 32, 87, 3, 589 },同时给它赋初值。银色显示的表达式arrayOfInts.length是得到二维数级arrayOfInts的长度,在这里是3。黄色显示的表达式是得到二维数级arrayOfInts的第i个元素的第j个元素的值,例如当i和j的值分别是1和2时,表达式arrayOfInts[i][j]的值是77。

continue语句
    continue语句的功能是跳过循环体中下面还未执行的语句,回到循环体部分的开始,从第一条语句始执行,但是在执行前,先要执行判断部分,以决定是否继续执行循环,对于for循环,在执行判断部分前,还要执行迭代部分。请看程序示例六:
public class ContinueDemo {
public static void main(String[] args) {

StringBuffer searchMe = new StringBuffer("peter piper picked a peck of pickled peppers");
int max = searchMe.length();
int numPs = 0;

for (int i = 0; i < max; i++) {
if (searchMe.charAt(i) != 'p')
continue;
numPs++;
searchMe.setCharAt(i, 'P');
}
System.out.println("Found " + numPs + " p's in the string.");
System.out.println(searchMe);
}
}
程序示例六
    关于该程序的详细执行过程以及详细的注释,请选择代码分析窗口。
    另外,continue语句也可以跳转到标签指明的地方去,格式为:continue 标签名,由于用得较少,这里就不再详述了

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值