Java基础Day03

大家国庆过得怎样?

1 switch结构

1.1 switch的格式
switch(表达式){
        case 常量值1:
            语句体1break;
        case 常量值2:
            语句体2break;
        ...
        default 
            语句体n+1break;
}

执行流程:

​ 1、先计算括号中表达式的值。

​ 2、将结果依次和case后面的值比较,匹配上的就执行case对应的语句体,遇到break就结束switch结构。

​ 3、当所有的case值都不匹配时,执行default后面的语句体n+1, default中省略break,效果一样。

案例代码:

/*
 * 需求:根据键盘录入的1-7,输出对应的星期一到星期日
 */
// 导包
import java.util.Scanner;
public class SwitchDemo {

	public static void main(String[] args) {
		// 创建键盘录入对象
		Scanner sc = new Scanner(System.in);
		// 提示用户输入
		System.out.println("请输入一个数字:");
		// 接收用户输入
		int week = sc.nextInt();
        
		// 使用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;
		}
	}
}
1.2 switch的注意事项
  • switch的小括号中表达式的值只能是byte short char int , 枚举, 字符串。
  • case 后面的值不能重复,不能是变量,只能是常量。
  • break用于结束switch语句 ,break可以省略,省略后会有case穿透现象。
1.3 case穿透案例
/*
	春夏秋冬

	需求:
		一年有12个月,分属于春夏秋冬4个季节,键盘录入一个月份,
		请用程序实现判断该月份属于哪个季节,并输出。

	春:3、4、5
	夏:6、7、8
	秋:9、10、11
	冬:12、1、2
*/

import java.util.Scanner;

public class SwitchDemo {
	public static void main(String[] args) {
		//键盘录入月份数据,使用变量接收
		Scanner sc = new Scanner(System.in);
		
		System.out.println("请输入一个月份:");
		int month = sc.nextInt();
		//case穿透
		switch(month) {
			case 3:   
			case 4:
			case 5:
				System.out.println("春季");
				break;
			case 6:
			case 7:
			case 8:
				System.out.println("夏季");
				break;
			case 9:
			case 10:
			case 11:
				System.out.println("秋季");
				break;
            case 12:
			case 1:
			case 2:
				System.out.println("冬季");
				break;
			default:
				System.out.println("你输入的月份有误");
		}

	}
}

练习:

//键盘输入数字1~5,控制台输出工作日,输入6,7时,输出休息日。

/*
	分析:
		1、导包并创建Scanner对象。
		2、提示用户输入数字
		3、使用nextInt()方法获取键盘录入的整数
		4、使用switch结构判断数字的值,输出对应的内容。
*/
//导包
import java.util.Scanner;
public class SwitchDemo{
	public static void main(String[] args){
		
		// 1、创建Scanner对象。
		Scanner sc = new Scanner(System.in);
		// 2、提示用户输入数字
		System.out.println("请输入一个整数(1~7):");
		// 3、使用nextInt()方法获取键盘录入的整数
		int week = sc.nextInt();
		
		// 4、使用switch结构判断数字的值,输出对应的内容。
		// 利用case穿透现象优化代码
		switch(week){
			case 1:
			case 2:
			case 3:
			case 4:
			case 5:
				System.out.println("工作日");
				break;
			case 6:
			case 7:
				System.out.println("休息日");
				break;
			default:
				System.out.println("您输入的数字有误!");
				break;
		} 
	}
}
【练习题1】以下程序的打印结果是什么?
int x = 2;
int y = 3;
	switch(x){
		case 2:
			y++;  //y=4
		case 3:
			y++; //y=5
        default:
			y++; //y=6
	}
System.out.println(y);  //6

2 循环结构

​ 循环语句可以在满足循环条件的情况下,反复执行某一段代码。

​ 循环结构组成:初始化语句,条件判断语句,循环体语句,条件控制语句。

​ 初始化语句:对循环条件进行初始化。

​ 条件判断语句:判断循环是否执行。

​ 循环体语句:反复执行的代码。

​ 条件控制语句:修改循环条件的值。

2.1 for循环

for循环格式
for (初始化语句; 条件判断语句; 条件控制语句) {
	循环体语句;
}
//案例:for循环打印5次HelloWorld
for(int i=1; i<=5; i++){
    System.out.println("HelloWorld");
}
执行流程

​ 1、执行初始化语句:int i = 1(只会执行一次)。

​ 2、执行条件判断语句 i<=5,如果为true,执行循环体语句,如果为false,则结束循环。

​ 3、执行循环体语句 : System.out.println("HelloWorld");

​ 4、执行条件控制语句 :i++

​ 5、回到第2步继续往下执行。

在这里插入图片描述
for循环输出数据

/*
	需求:
		使用for循环输出1~5
		使用for循环输出5~1
*/

public class ForDemo{
    public static void main(String[] args){
        //1~5
        for(int i=1; i<=5; i++){
            System.out.println(i);
        }
		
        System.out.println("-------------");
        
        //5~1
        for(int i=5; i>=1; i--){
            System.out.println(i);
        }
    }
}

for循环求和

/*
	需求:
		使用for循环求1~5之间的整数和,并在控制台输出。
*/
public class ForDemo2{
	public static void main(String[] args){
        //定义变量,存放求和结果
       int sum = 0;
        
		for(int i=1; i<=5; i++){
             //累加变量不能定义在循环里面
			//int sum= 0;
			sum+=i;   
		}
        
        //循环结束,打印求和结果
		System.out.println(sum);
	}
}

for循环求偶数和

/*
	需求:
		使用for循环求出1~100之间的偶数和,并在控制台输出结果。
	步骤:
		1. 使用for循环获得1~100之间的每一个整数
		2. 在循环体中使用if判断并得到每一个偶数 (如果 a%2==0, a就是偶数)
		3. 对得到的偶数进行累加求和。
		4. 循环结束, 输出结果。
*/
public class ForDemo3{
	public static void main(String[] args){
        // 定义求和变量
        int sum = 0;
        // 循环累计求和
        for(int i=1; i<=100; i++){
            //对偶数累计求和
            if( i%2==0 ){
                sum+=i;
            }
        }
        //输出结果
        System.out.println("1~100的偶数和为:"+sum);
	}
}

//实现方式2
public class ForDemo3{
	public static void main(String[] args){
        // 定义求和变量
        int sum = 0;
        // 循环累计求和
        for(int i=2; i<=100; i+=2){
        	sum+=i;
        }
        //输出结果
        System.out.println("1~100的偶数和为:"+sum);
	}
}

for循环求水仙花数

1、什么是水仙花数?100~999

	水仙花数指的是一个三位数,其个位、十位、百位的数字立方和等于该数本身。
	例如:153 = 1*1*1 + 5*5*5 + 3*3*3 =1 + 125 +27

2、如何获取每一位的数?

	例如153
	个位:153%10 = 3 
    十位:153/10%10 = 15%10 = 5
    百位:153/100%10 = 1
	
    规律: 求一个数n位上的数值,将该数除以n变成个位,再对10取余即可。
/*
	需求:
		控制台打印水仙花数
		
	步骤:
		1 for循环获取所有三位数
		2 得到每个三位数的个,十,百位上的数字
		3 判断是否是水仙花数
		4 打印水仙花数
*/
public class ForDemo4 {
    public static void main(String[] args) {
        //定义统计变量,存储水仙花数的个数
        int count  = 0;
		// 1. for循环获取所有三位数
		for(int i=100; i<1000; i++) {
            
			// 2. 得到每个三位数的个,十,百位上的数字
			int ge = i%10;
			int shi = i/10%10;
			int bai = i/100;
			
			// 3. 判断是否是水仙花数 : 个, 十, 百位立方和等于该三位数本身
			if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) {
				//4. 打印水仙花数
				System.out.println(i);
                count++;
			}
		}
        
        //循环结束,输出count的值
        System.out.println(count);
    }
}

for循环统计水仙花数

/*
	需求:
		使用for循环统计水仙花数的个数
*/
public class ForDemo5 {
    public static void main(String[] args) {
        //定义统计变量
        int count = 0;
        
		// 1. for循环获取所有三位数
		for(int i=100; i<1000; i++) {
            
			// 2. 得到每个三位数的个,十,百位上的数字
			int ge = i%10;
			int shi = i/10%10;
			int bai = i/100;
			
			// 3. 判断是否是水仙花数 : 个, 十, 百位立方和等于该三位数本身
			if(ge*ge*ge + shi*shi*shi + bai*bai*bai == i) {
				//4. 统计个数
				count++;
			}
		}
        // 5. 循环结束打印个数
        System.out.println(count);
    }
}

【单选】下面哪一个写法会导致死循环?(   )
A:for(int k=0; k<0; k++) 
B:for(int k=10; k>0; k--) 
c:for(int k=0; k<10; k--)  
D:for(int k=0; k>0; k++) 

2.2 while循环

while循环格式
初始化语句;
while(条件判断语句){
    循环体语句;
    条件控制语句;
}
//案例:while循环打印5次HelloWorld 
int i=1;
while( i<=5 ){
    System.out.println("HelloWorld");
    i++;
}

执行流程图
在这里插入图片描述
while循环求偶数个数

/*
	需求:
		使用for循环求1~100的偶数个数
		使用while循环求1~100的偶数个数
*/
public class WhileDemo{
	public static void main(String[] args){
		
		//使用for循环求1~100的偶数个数
		/* 
		int count = 0;
		for(int i = 1; i<=100; i++){
			//筛选偶数
			if(i%2==0){
				count++;
			}
		}
		System.out.println("1-100的偶数个数为:"+count);
		
		 */
		 
		 //使用while循环求1~100的偶数个数
		 
		 //定义一个统计变量
		 int count = 0;
		 
		 int i = 1;
		 while(i<=100){ 
			 if(i%2==0){
				count++; 
			 }
			 i++;
		 }
		 System.out.println("1-100的偶数个数为:"+count);
	}
}

珠穆朗玛峰

/*
	需求:
		使用while循环计算出0.1毫米的纸,折多少次可以折成珠穆朗玛峰的高度(8844.43米)8844430mm
	
	分析:
        第一次对折  0.1*2 = 0.2
        第二次对折  0.2*2 = 0.4
        第三次对折  0.4*2 = 0.8

        以此类推,发现每次对折后的纸张厚度是原先的2倍

        需要折叠多次,但具体次数又不知道,所以可以使用while循环。
        使用计数器累计折叠的次数,每对折一次,计数器加1

        循环什么时候结束?
            当对折的厚度大于等于珠峰高度8844430毫米的时候,结束循环。
            也就是说,当纸张厚度小于珠峰高度时,循环要继续执行。
*/
public class WhileTest{
	public static void main(String[] args){
		//初始化纸张厚度
		double paper = 0.1;
        //定义统计变量,记录对折次数
		int count = 0;
        
        //当纸张厚度小于珠峰高度时,循环要继续执行
		while(paper<8844430){
            //在循环体中,对纸张进行对折
			paper*=2;
            //每对折一次,统计变量加1
			count++;
		}
        //循环结束,输出结果
		System.out.println("折叠次数:"+count);
	}
}

2.3 do-while循环(了解)

do-while循环格式
初始化语句;
do {
	循环体语句;
	条件控制语句;
}while(条件判断语句);
//使用do-while循环在控制台打印5次HelloWorld
int i = 1;
do{
    System.out.println("HelloWorld");
    i++;
}while(i<=5);
执行流程

​ 1、执行初始化语句。(只执行一次)

​ 2、执行循环体语句。

​ 3、执行条件控制语句。

​ 4、执行条件判断语句,如果为false则结束循环,如果为true则回到第2步继续执行。

注意:do-while循环至少会执行一次循环体语句。
在这里插入图片描述
2.4 三种循环的区别(了解)

forwhiledo-while
特点先判断,再执行先判断,再执行先执行,后判断(至少执行一次)
初始化变量for循环外无法使用初始化变量循环结束后,初始化变量能继续使用循环结束后,初始化变量能继续使用
适用场景循环次数确定的情况需要用到死循环或者循环次数不确定的情况循环至少需要执行一次

依次推荐使用:for循环 、while循环 、do-while循环

简单的说,只有一个区别,即for循环和while循环先判断后执行,do -while循环先执行后判断。

三种循环的死循环简单写法:

//1、for循环
for(;;){}

//2、while循环
while(true){
    
}

//3、do-while循环
do{
    
}while(true);

2.5 跳转控制语句

break关键字
break使用场景:
    1、在switch中,用于结束switch结构。
    2、在循环中,用于结束break所在循环。
    3、可以为循环加上标签,让break结束指定循环。(了解)

注意:
	break语句后面不能直接跟其他语句,否则会编译报错。

continue关键字

continue使用场景:
	1. continue只能在循环中使用,用于跳过一次循环,开始下一次循环。
	2. 可以为循环加上标签,continue跳到指定循环继续执行。(了解)
	
注意:	
	continue后面不能直接跟其他语句,否则会编译报错。

continue是再来一次,break是循环结束。

//break和continue案例
public class ControlDemo{
    public static void main(String[] args){
        
        for(int i=1; i<=5; i++){
            if( i%2==0 ){
                continue; //遇到continue开始下次循环
                //break; //遇到break结束整个循环
            }
            System.out.println(i);
        }
        
        
    }
}

continue练习

/*
	需求:打印1~10之间的整数,遇到3的倍数时跳过不打印。
*/
public class ContinueDemo{
	public static void main(String[] args){
		//使用for循环获取1-10
        //循环内判断3的倍数时,使用continue跳过本次打印,不是3的倍数直接打印
        
	}
}

break练习

/*
	模拟一个用户管理系统
	控制台显示一个操作菜单:
		输入数字选择您要的操作:
		1.添加用户  2.修改用户  3.删除用户  4.查看总用户数  5.退出系统
	
		键盘输入对应的编号进行操作,当输入5时退出系统。
		
*/
import java.util.Scanner;
public class BreakDemo{
	public static void main(String[] args){
		//创建键盘录入对象
		Scanner sc =  new Scanner(System.in);
		
		//死循环
		xh:while(true){
			System.out.println("输入数字选择您要的操作:");
			System.out.println("1.新增用户  2.修改用户  3.删除用户  4.查看总用户数  5.退出系统");
			
			int num = sc.nextInt();
			
			switch(num){
				case 1:
					System.out.println("新增成功");
					break;
				case 2:
					System.out.println("修改成功");
					break;
				case 3:
					System.out.println("删除成功");
					break;
				case 4:
					System.out.println("当前用户数1000");
					break;
				case 5:
					System.out.println("欢迎使用本软件");
					//结束指定循环xh
					break xh;
				default:
					System.out.println("您的输入有误,请重新输入!");
			}
		}
	}
}

2.6 循环嵌套

循环嵌套的执行步骤:

​ 外循环执行一次,内循环执行一个循环周期。

​ 整个循环次数:外循环 乘以 内循环

课堂案例:

/*
	需求:
		在控制台输出一天的小时和分钟	
		分钟和小时的范围:
			分钟:0 <= minute < 60
			小时:0 <= hour < 24
*/
public class ForForDemo {
	public static void main(String[] args) {
		
		//外循环控制小时的范围
		for(int hour=0; hour<24; hour++) {
            
            //内循环控制分钟的范围
			for(int minute=0; minute<60; minute++) {
				System.out.println(hour + "时" + minute + "分");
			}
			System.out.println("--------");
            
		}
	}
}
/*
   嵌套练习:使用嵌套for循环打印3行4列的*型
	****
	****
	****
*/
public class ManyLoop1{
	public static void main(String[] args){
		
		/* 
		System.out.println("****");
		System.out.println("****");
		System.out.println("****");
		*/
		
		//使用循环打印****
		/*
			不换行打印 System.out.print(需要打印的内容);
		*/
		
		for(int hang =1; hang<=3; hang++){
			for(int lie=1; lie<=4; lie++){
				System.out.print("*"); //*****
			}
			//换行
			System.out.println(); 
		}
		
		
		
	}
}

3 Random

Random类的作用

​ Random是JDK中提供的工具类,位于【 java.util 】包下,用于产生随机数。

Random类的使用步骤
1.导包
	import java.util.Random;

2.创建对象	
	Random r = new Random();

3.产生随机数	
	int num = r.nextInt(100);

说明:
nextInt( 数值 ):代表随机生成并返回一个整数,如果括号数值为10,表示生成0-9的整数,数值20,表示生成0-19的整数。

/*
	需求:
		随机生成一个1~100之间的整数.
*/
//1.导包
import java.util.Random;
public class RandomDemo{
	public static void main(String[] args){
        
		//2.创建Random对象
		Random r = new Random();
		//3.调用方法产生随机数
		int num = r.nextInt(100)+1; 
        
		System.out.println(num);
	}
}

手机验证码

/*
	需求:
		随机生成一个长度为6,数字为0~9之间的手机验证码,并在控制台打印.
		打印后换行:System.out.println();
		打印不换行:System.out.print();
*/

public class RandomTest {
	public static void main(String[] args) {
		//创建对象
		Random r = new Random();
		
		for(int i=1; i<=6; i++){
			//调用方法,产生0-9的随机数
			int num = r.nextInt(10);
			System.out.print(num); 
		}
	}
}
猜数字小游戏

需求:

  • 随机生成1~100之间的数字,用户来猜这个随机数是多少。

  • 当猜的数字比实际数大了,提示"你猜的数字大了"

  • 当猜的数字比实际数小了,提示"你猜的数字小了"

  • 当猜的数字和实际数相等,提示"恭喜你猜中了"

分析步骤:

1、使用Random随机生成1~100之间的随机数。

2、使用Scanner获取键盘输入的数。

3、比较随机生成的数与键盘输入的数。

4、使用循环控制第2和第3步,直到用户猜对了才结束循环。

代码实现:

import java.util.Random;
import java.util.Scanner;

public class RandomGame {
	public static void main(String[] args) {
		//1、生成1~100的随机数
		Random r = new Random();
		int result = r.nextInt(100)+1;
		//2、创建键盘录入对象
		Scanner sc = new Scanner(System.in);

		//使用循环控制
		while(true){
			//提示用户输入
			System.out.println("请输入你要猜的数(1-100之间):");
			//获取输入的数
			int scNum = sc.nextInt();
			
			//3、比较随机数与输入的数
			if(scNum > result){
				System.out.println("你猜的数字大了");
			}else if(scNum < result){
				System.out.println("你猜的数字小了");
			}else{
				System.out.println("恭喜你猜中了");
				//用户猜中后,循环停止,程序结束
				break;
			}
		}
	}
}

拓展练习

/*
 【扩展练习1】打印如下图案的三角形      
   *
   **
   ***
   ****
   *****
 */
for(int hang=1; hang<=5; hang++){
    for(int lie=1; lie<=hang; lie++){
        //不换行打印
        System.out.print("*");
    }
    System.out.println();
} 
/*
  【扩展练习2】打印九九乘法表    
   1*1=1
   1*2=2	2*2=4
   1*3=3	2*3=6	3*3=9
 */

public class NineLoop{	
	public static void main(String[] args){
		//外层循环控制行
	   for(int hang=1; hang<=9; hang++){
		   
		   //内层循环控制列
		   for(int lie=1; lie<=hang; lie++){
				System.out.print( lie+"*"+hang+"="+(lie*hang)+"\t" );
		   }
		   System.out.println();
           
	   }   
	}
}
/*
	【扩展练习3】输出1~100之间的所有偶数, 每5个换一行
		System.out.println();  //输出并换行
		System.out.print(); //不换行输出
*/

public class Nice03{
	public static void main(String[] args){
		int num = 0;
		for(int i=1;i<=100;i++){
			if(i%2==0){
				System.out.print(i+" ");
				num += 1;
			}
			if(num%5==0){
				System.out.println();
			}
		}
	}
}

/*
	【扩展练习4】随机生成长度为4的网站登录验证码,验证码由随机生成的数字0~9,英文大小写字母组成。
*/

总结

switch结构
	格式:
	switch(表达式){
		case 常量值1:
			语句体1;
			break;
		case 常量值2:
			语句体1;
			break;
		case 常量值3:
			语句体1;
			break;
		default:
        	语句体n+1;
	}
	
表达式的值只能是 byte short char int 字符串 枚举

for循环
	for(int i =1; i<=5; i++){
		System.out.println(i);
	}

while循环
	int i =1;
	while( i<=5){
        System.out.println(i);
        i++;
    }

do-while循环 (了解)
int i =1;
do{
     System.out.println(i);
     i++;
}while(i<=5);

三种循环的区别
    for循环和while循环是可以等价转换的,都是先判断后执行
    do-while循环先执行,后判断
    
三种循环的死循环
for(;;){

}

while(true){

}

do{

}while(true);

breakcontinue
  continue 是结束一次循环,开始下次循环
  break 是直接结束整个循环
  
Random工具类:用于产生随机数
步骤:
	1、导包	import java.util.Random;
	2、创建对象 Random r = new Random();
	3、调用方法,产生随机数 int num = r.nextInt(10); //产生0-9的随机数
		//2-10之间的随机数
		int num = r.nextInt(9)+2; //产生2-10之间的随机数
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值