Java自学笔记 day4 循环语句

1:switch语句(掌握)
    (1)格式:
        switch(表达式) {
            case 值1:
                语句体1;
                break;
            case 值2:
                语句体2;
                break;
            ...
            default:
                语句体n+1;
                break;
        }
        
        格式解释说明:
            switch:说明这是switch语句。
            表达式:可以是byte,short,int,char
                JDK5以后可以是枚举
                JDK7以后可以是字符串
            case:后面的值就是要和表达式进行比较的值
            break:表示程序到这里中断,跳出switch语句
            default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else
    (2)面试题
        switch语句的表达式可以是byte吗?可以是long吗?可以是String吗?
            可以,不可以,JDK7以后可以
    (3)执行流程:
        A:首先计算表达式的值
        B:和每一个case进行匹配,如果有就执行对应的语句体,看到break就结束。
        C:如果没有匹配,就执行default的语句体n+1。
    (4)注意事项:
        A:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
        B:default可以省略吗?
            可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
            特殊情况:
                case就可以把值固定。
                A,B,C,D
        C:break可以省略吗?
            可以省略,但是结果可能不是我们想要的。
            会出现一个现象:case穿透。
            最终我们建议不要省略
        D:default一定要在最后吗?
            不是,可以在任意位置。但是建议在最后。
        E:switch语句的结束条件
            a:遇到break就结束了
            b:执行到末尾就结束了

	案例:
		键盘录入一个数据,根据这个数据,我们输出对应的星期?
			键盘录入1,对应输出星期一
			键盘录入2,对应输出星期二
			...
			键盘录入7,对应输出星期日
			
	分析:
		1:键盘录入,用Scanner实现
		2:判断我们既可以使用if语句,也可以使用我们要讲解的switch语句
		
	注意:
		A:遇到左大括号缩进一个tab的位置。
		B:关联不是很大的语句间空行
*/
import java.util.Scanner;

class SwitchDemo {
	public static void main(String[] args) {
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		
		//控制键盘录入数据
		System.out.println("请输入一个数据(1-7):");
		int week = sc.nextInt(); //3
		
		//switch判断语句
		switch(week) {
			case 1:
				System.out.println("星期一");
				break;
			case 2:
				System.out.println("星期二");
				break;
			case 3:
				System.out.println("星期三");
				break;
			case 4:
				System.out.println("星期四");
				break;
			case 5:
				System.out.println("星期五");
				break;
			case 6:
				System.out.println("星期六");
				break;
			case 7:
				System.out.println("星期日");
				break;
			default:
				System.out.println("你输入的数据有误");
				break;
		}
	}
}
/*
	看程序写结果
*/
class SwitchTest {
	public static void main(String[] args) {
		int x = 2;
		int y = 3;
		switch(x){
			default:
				y++;
				break;
			case 3:
				y++;
			case 4:
				y++;
		}
		System.out.println("y="+y);
		System.out.println("---------------");
		
		int a = 2;
		int b = 3;
		switch(a){
			default:
				b++;
			case 3:
				b++;
			case 4:
				b++;
		}
		System.out.println("b="+b);
	}
}

输出:4 和 6
 

2:循环语句(掌握)
    (1)有三种:for,while,do...while
    (2)for循环语句
        A:格式
            for(初始化语句;判断条件语句;控制条件语句){
                循环体语句;
            }
            
            执行流程:
                a:执行初始化语句
                b:执行判断条件语句
                    如果这里是true,就继续
                    如果这里是false,循环就结束
                c:执行循环体语句
                d:执行控制条件语句
                e:回到b
        B:注意事项
            a:判断条件语句无论简单还是复杂,结果是boolean类型
            b:循环体语句如果是一条,可以省略大括号,但是不建议
            c:有分号就没有左大括号,有左大括号就没有分号

/*
	需求:求出1-10之间数据之和
	
	分析:
		0+1=1
			1+2=3
				3+3=6
					6+4=10
						10+5=15
							 ...
							 
		由此可见我们要定义两个变量:
			一个变量用于存储第一个加数,第一个加数其实保存的是以前的所有数据和。默认初始化值应该是0。
			一个变量用于存储第二个加数,第二个加数其实就是每次的数据变化的值。
			
	求和思想。		
*/
class ForDemo3 {
	public static void main(String[] args) {
		//原始做法
		System.out.println(1+2+3+4+5+6+7+8+9+10);
		
		//定义第一个加数
		int sum = 0;
		
		for(int x=1; x<=10; x++) {
			//这里的x其实是第二个加数
			sum = sum + x;
			/*
				0 + 1 = 1
						1 + 2 = 3
								3 + 3 = 6
								...
			*/
			
			//sum += x;
		}
		
		System.out.println("sum:"+sum);
	}
}
/*
	需求:统计”水仙花数”共有多少个
	
	分析:
		A:首先必须知道什么是水仙花数
			所谓的水仙花数是指一个三位数,其各位数字的立方和等于该数本身。
			举例:153就是一个水仙花数。
			153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153
		B:定义统计变量,初始化值是0
		C:三位数告诉了我们范围,用for循环就可以搞定
		D:获取每一个三位数的个,十,百的数据
		E:按照要求进行判断
		F:如果满足要求就计数。
*/
class ForDemo8 {
	public static void main(String[] args) {
		//定义统计变量,初始化值是0
		int count = 0;
		
		//三位数告诉了我们范围,用for循环就可以搞定
		for(int x=100; x<1000; x++) {
			//获取每一个三位数的个,十,百的数据
			int ge = x%10;
			int shi = x/10%10;
			int bai = x/10/10%10;
			
			//按照要求进行判断
			if(x == (ge*ge*ge+shi*shi*shi+bai*bai*bai)) {
				//如果满足要求就计数。
				count++;
			}
		}
		
		System.out.println("水仙花数共有"+count+"个");
	}
}


        
    (3)while循环
        A:基本格式
            while(判断条件语句) {
                循环体语句;
            }
            
            扩展格式:
            初始化语句;
            while(判断条件语句){
                循环体语句;
                控制条件语句;
            }   

/*
	while循环的基本格式:
		while(判断条件语句) {
			循环体语句;
		}
		
		扩展格式:
		
		初始化语句;
	    while(判断条件语句) {
			 循环体语句;
			 控制条件语句;
		}
		
		通过这个格式,我们就可以看到其实和for循环是差不多的。
		
		for(初始化语句;判断条件语句;控制条件语句) {
			循环体语句;
		}
*/
class WhileDemo {
	public static void main(String[] args) {
		//输出10次"HelloWorld"
		//for语句版
		for(int x=0; x<10; x++) {
			System.out.println("HelloWorld");
		}
		System.out.println("--------------");
		//while语句版
		int x=0;
		while(x<10) {
			System.out.println("HelloWorld");
			x++;
		}
		
	}
}
/*
	练习:用while循环实现
	左边:求出1-100之和
	右边:统计水仙花数有多少个
	
	初始化语句;
	while(判断条件语句) {
		 循环体语句;
		 控制条件语句;
	}
	
	
	
	for(初始化语句;判断条件语句;控制条件语句) {
		循环体语句;
	}

*/
class WhileDemo2 {
	public static void main(String[] args) {
		//求出1-100之和
		//for语句版本
		int sum = 0;
		
		for(int x=1; x<=100; x++) {
			sum+=x;
		}
		
		System.out.println("sum:"+sum);
		System.out.println("--------");
		//while语句版本
		int sum2 = 0;
		
		int y=1;
		while(y<=100) {
			sum2+=y;
			y++;
		}
		
		System.out.println("sum2:"+sum2);
		System.out.println("--------");
	}
}


    (4)do...while循环
        A:基本格式
            do {
                循环体语句;
            }while(判断条件语句);
            
            扩展格式:
            初始化语句;
            do {
                循环体语句;
                控制条件语句;
            }while(判断条件语句);
            
            通过查看格式,我们就可以看出其实三种循环的格式可以是统一的。

/*
	do...while循环的基本格式:
		do {
			循环体语句;
		}while(判断条件语句);
		
		扩展格式;
		初始化语句;
		do {
			循环体语句;
			控制条件语句;
		}while(判断条件语句);
*/
class DoWhileDemo {
	public static void main(String[] args) {
		//输出10次HelloWorld。
		int x = 0;
		do {
			System.out.println("HelloWorld");
			x++;
		}while(x<10);
		
		System.out.println("--------------");
		
		//求和1-100
		int sum = 0;
		int a = 1;
		do {
			sum += a;
			a++;
		}while(a<=100);
		
		System.out.println(sum);
	}
}


        B:三种循环的区别
            a:do...while循环至少执行一次循环体
            b:for和while必须先判断条件是否是true,然后后才能决定是否执行循环体
    (5)循环使用的注意事项(死循环)
        A:一定要注意修改控制条件,否则容易出现死循环。
        B:最简单的死循环格式
            a:while(true){...}
            
            b:for(;;){}
            

3:控制跳转语句(掌握)
    (1)break:中断的意思
        A:用在循环和switch语句中,离开此应用场景无意义。
        B:作用
            a:跳出单层循环
            b:跳出多层循环,需要标签语句的配合
    (2)continue:继续
        A:用在循环中,离开此应用场景无意义。
        B:作用
            a:跳出单层循环的一次,可以继续下一次
        C:填空题
            for(int x=1; x<=10; x++) {
                if(x%3 == 0) {
                    //补齐代码
                }
                System.out.println("Java基础班");
            }
            如何让控制台输出2次:Java基础班
            如何让控制台输出7次:Java基础班
            如何让控制台输出13次:Java基础班
    (3)return:返回
        A:用于结束方法的,后面还会在继续讲解和使用。
        B:一旦遇到return,程序就不会在继续往后执行。

/*
	控制跳转语句:
		break:中断
		continue:继续
		return:返回
	
	break:中断的意思
	使用场景:
		A:switch语句中
		B:循环语句中。
			(循环语句中加入了if判断的情况)
		注意:离开上面的两个场景,无意义。
		
	如何使用呢?
		A:跳出单层循环
		B:跳出多层循环
			要想实现这个效果,就必须知道一个东西。带标签的语句。
			格式:
				标签名: 语句
*/
class BreakDemo {
	public static void main(String[] args) {
		//在 switch 或 loop 外部中断
		//break;
		
		//跳出单层循环
		for(int x=0; x<10; x++) {
			if(x == 3) {
				break;
			}
			System.out.println("HelloWorld");
		}
		
		System.out.println("over");
		System.out.println("-------------");
		
		wc:for(int x=0; x<3; x++) {
			nc:for(int y=0; y<4; y++) {
				if(y == 2) {
					//break nc;
					break wc;
				}
				System.out.print("*");
			}
			System.out.println();
		}
	}
}
/*
	continue:继续
	
	使用场景:
		循环中。离开此场景无意义。
		
	测试,找到和break的区别:
		break:跳出单层循环
		continue:跳出一次循环,进入下一次的执行
		
	练习题:
		for(int x=1; x<=10; x++) {
			if(x%3==0) {
				//在此处填写代码
			}
			System.out.println(“Java基础班”);
		}
		
		我想在控制台输出2次:“Java基础班“
			break;
		我想在控制台输出7次:“Java基础班“
			continue;
		我想在控制台输出13次:“Java基础班“	
			System.out.println(“Java基础班”);


*/
class ContinueDemo {
	public static void main(String[] args) {
		for(int x=0; x<10; x++) {
			if(x == 3) {
				//break;
				continue;
			}
			
			System.out.println(x);
		}
	}
}

输出:0123456789

/*
	return:返回
	
	其实它的作用不是结束循环的,而是结束方法的。
*/
class ReturnDemo {
	public static void main(String[] args) {
		for(int x=0; x<10; x++) {
			if(x == 2) {
				System.out.println("退出");
				//break;
				//continue;
				return;
			}
			
			System.out.println(x);
		}
		
		System.out.println("over");
	}
}


        

猜你喜欢

转载自blog.csdn.net/weixin_41147429/article/details/81196102