一、while关键字
1.代码:
boolean sign = true;
while (sign) {// 括号中写判定条件,结果类型为boolean
// 循环体
}
2.知识点
- 当括号中条件判定为true时,执行循环体;判定结果为false时,结束循环。判定在每次循环前执行。
- 需要注意的是,java中的while不同于c语言的点在于,括号中的结果要求值为boolean类型,通过(1)“>”“<”“==”“!=”“>=”“<=”判断大小或是否相等;(2)调用变量,或调用方法的结果为boolean 来获取boolean值。
- 补充:C语言中的判定条件为括号中返回值为非0数(C语言中的判定结果只有0和非0,非0认为是1,对应true;0对应false。C89中是不存在boolean这一基本数据类型的,如需要可以自己定义一下
#define TRUE 1
#define FALSE 0
只是便于我们理解代码逻辑,代码内部的逻辑不会发生改变。
二、do-while代码块
1.代码:
boolean sign = true;
do {
// 循环体
} while (sign);
- do-while代码块是用来确保循环体至少执行一遍的情况,运行原理与while类似,只是第一次执行循环体时不需要判定条件。
三、for关键字
1.代码
int arr[] = new int[10];
for (int i = 0; i < arr.length; i++) {
// 循环体
}
2.知识点
(1)for关键字后的参数(括号里的东西)一般分为三部分,用英文分号分隔。
for(第一部分;第二部分;第三部分){
// 循环体
}
a. 三部分都可以为空,即:
for (;;) {
// 循环体
}
这时作用等同于:
while (true) {
// 循环体
}
只能靠循环体内部的break跳出,否则将进入死循环。
b. 第一部分会在判定、循环体之前执行,且只执行一次
// 可以为空
for (;第二部分;第三部分) {
// 循环体
}
// 给参数设定初值
for (i = 0;第二部分;第三部分) {
// 循环体
}
// 定义参数并赋值
for (int i = 0;第二部分;第三部分) {
// 循环体
}
c.第二部分:判定条件,在每次循环体执行前进行判定,判定结果为true则执行循环体;结果为false则结束循环。
// 下面表示i分别等于0~9,执行了10遍循环体,一般用于枚举或数组的遍历
int arr[] = new int[10];
for (int i = 0; i < arr.length;i++) {
// 循环体
}
// 下面表示一个标志变量sign,当满足一定条件时,修改sign的值以结束循环
for (boolean sign = true; sign == true;) {
// 循环体
if (……) {
sign = false;
}
}
d.第三部分:附加的循环体,每次执行完循环体后都会执行一遍第三部分的运算
// i从初值0开始,每次循环i都会自加1
int arr[] = new int[10];
for (int i = 0; i < arr.length;i++) {
// 循环体
}
(2)for的进阶使用方法
for (声明语句 : 表达式) {
// 循环体
}
例:
int arr[] = new arr[10];
for (int i : arr) {
System.out.println(i);
}
a.声明语句:必须定义一个与数组同类型的新变量,且不能进行赋值
b.表达式:此处应为一个数据类型与声明语句一致的数组,如果是已定义的数组,直接写数组名即可(不需要写成arr[]的格式);此处也可以是一个方法,返回值为一个数组。
①易错点一
int i;
int arr[] = new arr[10];
for (i : arr) {
System.out.println(i);
}
以上写法是不被允许的(会报错),i 处的变量必须在内部定义。不定义更不行!
②易错点二:声明的变量类型与数组类型不一致
- 这种写法的本质就是,在遍历的每次循环中 将数组中对应的元素赋值给左边声明的变量,所以数据类型不一致时会发生自动类型转换。
- 补充一个知识点:自动类型转换
总之,级别如下
低 ------------------------------------> 高
byte,short,char—> int —> long—> float —> double
左边变量级别低于右边数组变量,即左低右高时,程序会报错。
左边变量级别高于右边数组变量,即左高右低时,编译允许,不会报错
但还是不建议!不建议!
规范一点总没错,学习得越深越能发现规范的好处。