day04-Java学习

day04-Java学习

1)switch语句的使用:

/*
	键盘录入有三种:
		1.早期的 main方法中的参数: String[] args      弊端:只能接收字符串数据
		
		2.JDK5以后 Scanner类:键盘录入
		
		3.IO流中: BufferedReader(字符缓冲流)  readLine()
		
		
	使用Scanner类里面的功能:public String nextLine() :可以录入一个字符串数据
*/

练习1:

​ 键盘录入一个字符串数据,判断是哪个字符串?

//导包
import java.util.Scanner;
class SwitchTest{
	public static void main(String[] args){
		
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//提示并接收数据
		System.out.println("请您输入一个数据:") ;
		//String line = sc.nextLine() ;
		//int a = sc.nextInt() ; 
		//java.util.InputMismatchException:运行时期异常 (你录入的数据和接收数据的类型不匹配)
		
		
		//改进:防止出现异常:
		//如果能够提供一个判断功能话:  
		//Scanner类给开发者提供一些判断功能:boolean hasNextXXX() :判断录入的下一个数据是否是XXX类型
		//boolean hasNextInt():判断下一个录入的数据是否是一个int类型
		if(sc.hasNextInt()){//true的结果
			//如果是int类型,才接收数据!
			int a = sc.nextInt() ; 
			System.out.println(a) ; 
		}else{
			System.out.println("您录入的数据和接收的数据类型不匹配!") ;
		}
		
		
		//输出字符串
		//System.out.println(line) ; //"100"
		
		
		//使用switch语句
		/*
		switch(line){
		case "hello":
			System.out.println("您输入的是hello") ;
			break ;
		case "JavaEE":
			System.out.println("您输入的是JavaEE") ;
			break ;
		case "php":
			System.out.println("您输入的是php") ;
			break ;
		case "python":
			System.out.println("您输入的是python") ;
			break ;
		default:
			System.out.println("您输入的字符串不存在...") ;
			break ;
		}
		*/
	}
}

练习2:

现在使用switch实现:键盘录入月份的值,判断季节

​ 3,4,5 春季
​ 6,7,8 夏季
​ 9,10,11 秋季
​ 12,1,2 冬季

//导包
import java.util.Scanner;
class SwitchTest{
	public static void main(String[] args){
		//创建键盘录入对象
		Scanner sc = new Scanner(System.in) ;
		
		//提示并接收
		System.out.println("请您输入一个数据:") ;
		int month = sc.nextInt() ;
		
		switch(month){
		//直接利用case穿透
		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("您输入的数据不合法,不存在该月份!") ;
			break ; 
		}
	}
}

2)for循环语句

循环语句的格式:
for循环
while循环
do-while循环

for循环的格式

	for(初始化语句;条件表达式;步长语句(控制体语句)){
		循环体语句;
	}
	

执行流程:
1)进入for循环,给变量进行初始化,执行初始化语句
2)判断条件表达式是否满足条件 (true的结果),然后执行循环体语句
3)执行循环体完毕之后,执行步长语句(对变量进行操作:++/–)
4)继续判断条件表达式是否成立,如果成立,再次执行循环体语句----->再次执行步长语句



5)当前条件表达式不成立,for语句结束!

练习1:

控制台输出所有的"水仙花数";

什么是水仙花数:水仙花数指的是三位数---->范围:使用for循环 1001000之间(不包含)
水仙花数的特点:
	三位数的每个位上的数据的立方之和是这个数据本身!
	举例:
		153 = 1*1*1 +5*5*5 + 3*3*3 
		
关键:如何确定每个位上的数据:

	定义三个变量,分别获取每个位上的数据 
		int ge = 该数据本身 % 10 ;	%:(求余数)
		int shi = 该数据本身 /10 % 10;   //153 ---十位的数据:5
		int bai = 该数据本身/10 /10 %10 ;
		
	确定了每个位上的数据了,只要满足条件: 该数据本身 == ge*ge*ge+shi*shi*shi +bai*bai*bai
	
	输出这个数据---"水仙花数"

class Flower{
	public static void main(String[] args){
		int a;
		int b;
		int c ;
		for(int i = 100; i < 1000; i++){
		    a = i / 100 % 10;
			b = i / 10 % 10;
			c = i % 10;
			if(a*a*a + b*b*b + c*c*c == i){
			System.out.println(i);
			}
		}
	}
}

练习2:

问题:统计所有的水仙花数有多少个?

分析:
统计思想:
1)定义一个统计变量: 默认值从0开始 count
2)获取水仙花数据
三位数,告诉我们一个范围100-999
3)确定每个位上的数据
int ge = 该数据本身 %10 ;
int shi = 该数据本身 /10 %10;
int bai = 该数据本身/10 /10 %10 ;
4)满足条件:该数据==gegege+shishishi+baibaibai
统计变量++

​ 5)输出统计变量

class Flowers{
	public static void main(String[] args){
		
		//定义一个统计变量,默认值是0
		int count = 0 ;
		//获取水仙花数
		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(x) ;
			}
		}
		
		//输出统计变量
		System.out.println("水仙花数共有"+count+"个") ;
		
		
	}
}

练习3:

使用for循环
问题:
1-100之间的和
1-100之间的偶数和

​ 求5的阶乘!
​ 举例:
​ n! = n * (n-1)!
​ n! = n* (n-1) * (n-2)*…;

class ForTest{
	public static void main(String[] args){
		//1-100之间的和
		//定义一个结果变量sum
		int sum = 0 ;
		for(int x = 1 ; x <= 100; x ++){
			sum += x ;
		}
		System.out.println("sum:"+sum) ;
		System.out.println("----------------------") ;
		//1-100之间的偶数和
		//定义一个结果变量
		int sum2 = 0 ;
		for(int x = 1 ; x <= 100 ; x ++){
			//判断是否是偶数
			if(x % 2 == 0){
				sum2 += x ;
			}
		}
		System.out.println("sum2:"+sum2) ;
		System.out.println("----------------------") ;
		//方式2
		int sum3 = 0 ;
		for(int x = 0 ; x <= 100 ; x+=2) { //x=0,0<=100 ; ---> 0+2 =2
			sum3 += x ;
		}
		System.out.println("sum3:"+sum3) ;
		System.out.println("----------------------") ;
		//求5的阶乘!  求阶乘思想跟求和思想一致
		//5!= 5 * 4! 
		 //   =  5 * 4 * 3 * 2 * 1
		 
		 //定义最终结果变量
		 int jc = 1 ;
		 for(int x = 2 ; x <= 5 ; x ++ ){
				jc *= x ; //jc = jc * x ;  //x =1  -- 1*1 =1 ;
		 }
		 System.out.println("jc:"+jc) ;
	}
}

3)while循环语句

while循环
基本格式

while(条件表达式){
循环体语句;
步进语句;
}

扩展格式:(使用居多)
初始化语句 ;
while(条件表达式){
循环体语句;
步进语句;
}

执行流程:
1)先执行初始化语句,该变量进行初始化
2)判断条件表达式是否成立,如果成立,先执行循环体语句,----->执行步进语句
3)继续判断条件是否成立,如果还成立,继续在执行循环体语句----->执行步进语句


最终,条件表达式不成立,while循环结束!

初始化语句 ;
while(条件表达式){
	循环体语句;
	步长语句;
}

使用while循环
	需求:1-100之间的和/偶数和
	需求:输出所有的水仙花数
	需求:统计所有的水仙花数有多少个
*/
	class WhileDemo2{
	public static void main(String[] args){
		//需求:1-100之间的和
		//最终结果变量
		int sum = 0 ;
		int i = 1 ;
		while(i<=100){
			sum += i ;
			i++;
		}
		
	System.out.println("1-100之间的和是:"+sum) ;
	System.out.println("---------------------") ;
	
	//1-100之间的偶数和
	int sum2 = 0;
	int j = 1 ;
	while(j<=100){
		//判断
		if(j % 2 ==0 ){
			sum2 += j ;
		}
		j ++ ;
	}
	System.out.println("1-100之间的偶数和是:"+sum2) ;
	System.out.println("---------------------") ;
	
	//需求:输出所有的水仙花数
	//初始化语句
	int x = 100 ;
	while(x<1000){
		//获取每个位上到数据
		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)){
			System.out.println(x) ;
		}
		//x++ 步长语句
		x ++ ;
	}
	
	System.out.println("---------------------") ;
	//统计水仙花数
	//定义统计变量
	int count = 0 ;
	int n = 100 ;
	while(n < 1000){
		
		//获取每个位上到数据
		int ge = n % 10 ;
		int shi = n /10 % 10 ;
		int bai = n /10 /10 % 10 ;
		//满足的条件
		if(n == (ge*ge*ge + shi*shi*shi+bai*bai*bai)){
			count ++ ;
		}
		
		n ++ ;
	}
	
	System.out.println("水仙花数共有:"+count+"个");
  }
}

重点:

while循环和for循环的区别?

1)两种循环格式不一样 
	while循环---->
			从内存角度考虑,while循环结束了,依然可以访问循环中的变量(消耗内存空间)
	for循环----->
			从内存角度考虑,for循环结束了,不能访问变量(变量生命周期随着for循环的结束而结束),比较省内存空间
2)从应用场景来说:
	一般情况:如果明确循环次数或者明确循环的范围,优先考虑使用for循环
				举例:给3次机会,模拟用户登录..   可以使用for循环
			
			如果不明确循环次数或者不明确的范围,使用while循环操作 
				举例:	
					猜数字游戏,(产生的随机和用户录入的数据进行比较)
								---->这种情况:使用while循环操作
	
for和while都存在死循环,如果控制不好步长语句的话,就造成死循环!
对于死循环,要灵活运用死循环,达到某种条件的时候,结束掉死循环!
class WhileTest{
	public static void main(String[] args){
		
		//for循环的死循环
		/*
		for(;;){
		//满足什么条件,结束(根据实际的业务需求)
			System.out.println("很高兴,学习了死循环...") ;
		}
		*/
		
		//使用while(true)
		while(true){ //永远成立
			System.out.println("很高兴,学习了死循环...") ;
		}
	}
}

练习1:

//猜数字小游戏
	//java.lang.Math类:数学运算的类 
	//方法:获取随机数的方法:public static double random() 取值范围:[0.0,1.0)
	键盘录入一个数据:整数类型(int) 和随机数据比较,
	如果大了,提示"您录入的数据大了"
	如果小了,提示"您录入的数据小了"
	相等,提示"恭喜您,猜中了"	
	
	附加条件:统计 多少次猜中了
import java.util.Scanner;
class WhileTest{
	public static void main(String[] args){
		
			//获取一个随机数
		//double d = Math.random() ;
		//System.out.println(d) ;
		//想求出:1-100之间的随机数
		int number = (int)(Math.random()*100+1);   //double
		//System.out.println(number) ;
		while(true){ //不知道录入多少次,使用while死循环
			
		
			//创建键盘录入对象
			Scanner sc = new Scanner(System.in) ;
			//提示并接收
			System.out.println("请您输入一个数据:");
			int guessNum = sc.nextInt() ;
			
			//选择结构语句
			if(guessNum > number){
				System.out.println("您录入的数据大了...") ; 
			}else if(guessNum < number){
				System.out.println("您录入的数据小了...") ; 
			}else{
				System.out.println("恭喜您,猜中了...") ;
				break ; //结束循环!  (中断,结束)
			}
		}
		
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值