语句的表达方式不一样,但是一定程度上可以互相改写的.
但是一般来说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 标签名,由于用得较少,这里就不再详述了