循环结构(while、do-while、for)

一、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 处的变量必须在内部定义。不定义更不行!

for

②易错点二:声明的变量类型与数组类型不一致
  • 这种写法的本质就是,在遍历的每次循环中 将数组中对应的元素赋值给左边声明的变量,所以数据类型不一致时会发生自动类型转换。
  • 补充一个知识点:自动类型转换
    总之,级别如下
低  ------------------------------------>  高

byte,short,char—> int —> long—> float —> double 

左边变量级别低于右边数组变量,即左低右高时,程序会报错

for1


左边变量级别高于右边数组变量,即左高右低时,编译允许,不会报错
for2
但还是不建议!不建议!
规范一点总没错,学习得越深越能发现规范的好处。

猜你喜欢

转载自blog.csdn.net/War_wick/article/details/126105246