HM-Day 02

HM-Day 02

5 - 29

数据类型的大小顺序

byte --->shortchar)---->int---> long---> float---> double

1字节     2字节             4字节  8字节     4字节      8字节   
  1. 小的数据类型是可以直接转为大的数据类型(隐式类型转换);
  2. 大的数据类型是不可以直接转为小的数据类型,需要在需要转换的值前加“(数据类型)”才可以(强制类型转换);
注意:
  1. 强制类型转换会损失精度,不建议使用;
  2. byte,short,char数据类型在一起运算的时候,不管是否有最高的数据类型,都会提升为int,然后再进行运算;

算术运算符

"+"的操作:对于不同的数据类型是做拼接操作,对于
import java.util.Scanner;
public class demo2Operator{
	public static void main(String []args){
		Scanner sc = new Scanner(System.in);
    System.out.println("请输入第一个正数:");
		int a = sc.nextInt();
		System.out.println("请输入第二个正数:");
		int b = sc.nextInt();
		System.out.println("两个整数的和是:"+(a+b));
	}
}
		

运行结果如下:

自增自减

单独使用:++或者–放在操作数前面和后面没有区别。都表示自增1或者自减1;

举例:

int a = 10;
a++;
++a;

混合使用:要看++或者–用在操作数前面还是后面;

  1. ++或者–在前:先自增或者自减,再做其他运算

​ 举例:

int a = 3;
int b = ++a;//等价于a++;int b = a;
  1. ++或者–在后:先做其他运算,再自增或者自减

    举例:

    int x = 3;
    int y = x++;//等价于int y = x;x++;
    

赋值运算符(扩展的赋值运算符)

基本的赋值运算符:= 
    //运算规则:把右边的值赋值给左边的变量
    int a = 10; 

扩展的赋值运算符:+= -= *= /= %=
    //运算规则:左右两边运算的结果,重新赋值给左边
	a+=1; 

注意事项:
    //扩展的赋值运算符隐含有强制类型转换
    short s = 1;
	s+=1; //等价于 s = (short)(s+1);

逻辑运算符

基本的逻辑运算符

逻辑运算符:& | ! ^
    &: 两边都是true,结果才是true; 有一个为false,结果就为false
    |: 两边都是false,结果才是false; 有一个为true,结果就为true
    !: truefalse; falsetrue
    ^: 两边相同则为false; 两边不同则为true

短路逻辑运算符

public class demo3Operator{
	public static void main(String[]args){
		/*
			&和&&的区别:
			&在执行时,两边的都执行;
			&&在执行时,会出现短路的状况,即:当左边的判断为false的时候,右边的不执行,直接判定为false;
			同理:|和||也是一样,单个|是两边都执行;||是当左边为true时,右边不执行,直接判定为true;
			**建议:平时都有&&和||,可以提高运行效率。
		*/
		int a = 10;
		System.out.println(a > 11 & --a < 10 );//false & true = false
		System.out.println(a);//a=9
		
		int b = 5;
		System.out.println(b > 6 && --b < 5);//false && 不执行 = false
		System.out.println(b);// b=5
	}
}

三元运算符

格式:数据类型 变量名 = 关系表达式?表达式A:表达式B;

练习

import java.util.Scanner;
public class demo4Operator{
	public static void main(String[]args){
		int a = 3,b = 4,c = 5;
		int max  = a > b? a : b;//三元运算符的使用
		max  = max > c ? max : c;//第二次使用
		System.out.println("三个数的最大值是:"+max);
		System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入你的年龄:");
		int age = sc.nextInt();//从键盘中输入一个年龄; 
		String result  = age >= 18? "恭喜你可以上网吧!":"对不起,你的年龄不符合上网的要求!";
		System.out.println(result);
	}
}
		

运行结果:

条件控制语句-if

import java.util.Scanner;
public class demo1If{
	public static void main(String[]args){
		/**
		需求1:
		定义一个整数表示一个人的年龄,判断年龄否满18岁,如果满18岁输出`"可以上网吧"
		格式一:
		if(判断条件?){
			   结果
			}
		*/
		System.out.println("***************if语句格式一*******************");
		int age1 = 20;
		System.out.println("开始");
		if(age1>=18){
			System.out.println("可以上网吧!");
		}
		System.out.println("结束");
		/**
		需求2:
		定义一个整数表示一个人的年龄,判断年龄否满18岁,如果满18岁输出`"可以上网吧"
		否则输出"在家里写作业!"
		格式二:
		if(判断条件?){
			结果一
		}else{
			结果二
		}
		*/
		System.out.println("***************if语句格式二*******************");
		int age2 = 10;
		
		if(age2>=18){
			System.out.println("可以上网吧!");
		}else{
			System.out.println("在家里做作业!");
		
		}
		/**
		需求3:
		需求:键盘录入一个整数表示学生的成绩,根据成绩来划分等级
				0~59: 不及格
				60~69: 及格
				70~79: 良好
				80~89: 优秀
				90~100:非常优秀 
		格式三:
		if(判断条件?){
			结果一
		}elseif{
			结果二
		}elseif{
			结果三
			...
		}else{
			结果*
		}
		*/
		System.out.println("***************if语句格式三*******************");
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入你的成绩:");
		int score  = sc.nextInt();
		if(score>=90&&score <=100){
			System.out.println("你的成绩非常优秀!");
		}else if(score>=80&&score <=89){
			System.out.println("你的成绩优秀!");
		}else if(score>=70&&score <=79){
			System.out.println("你的成绩良好!");
		}else if(score>=60&&score <=69){
			System.out.println("你的成绩及格!");
		}else if(score>=0&&score <=59){
			System.out.println("你的成绩不及格!");
		}else{
			System.out.println("你的成绩输入有误!");
		}
	}
}
		
		

运行结果:

实际运用

1. 房贷计算器

应用场景

	当今社会买房几乎是所有民众热议的话题,很多人买房都需要找银行贷款,但是贷款银行是要收取利息的。假设你是房产中介,每次帮客人算利息非常麻烦,现在我们可以做一个房贷计算器,只需要用户输入贷款总额、贷款期限(月)、就能算出,月供多少钱、还款总额、总利息。

下面是招商银行提供的个人贷款计算器,现在我们也可以完成这样的功能咯😊。

金融小知识

​ 由于我们我们不懂专业的金融知识,所以下面给大家提供了计算公式,在这种情况下程序员只需要运用公式完成功能,从而【提高生产效率】(👍是不是感觉程序员的双手🤲可以改变世界)

名词解释:
    - LRP年利率:由18家银行报价去掉最高值去掉最低值取平均值,每月发布一次。
    - 加基点: 在LRP利率的基础上增加的点数,由商业银行自行定价。
    - 举例:当前LRP年利率为4.65%,银行增加1.08%个基点
    	   则购房的年利率 = 4.65%+1.08% =5.73% 

    //月利率 = (LRP年利率+增加基点)/12;
  	    
    //每月月供  = (贷款总额*月利率*Math.pow(1+月利率,还款期数))/(Math.pow(1+月利率,还款期数)-1);
	double 每月月供 = (贷款总额*月利率*Math.pow(1+月利率,还款月数))
    			/(Math.pow(1+月利率,还款月数)-1);
	
	//还款总额 = 每月月供 * 总期数;
	
	//利息总额 = 还款总额 - 贷款总额;

功能需求

	当前房贷的LRP年利率是4.65%,银行加点1.08%,键盘录入贷款总额,贷款年限(一年12),
然后利用以上公式计算出每月月供、还款总额、利息总额,并打印输出.

代码实现

import java.util.Scanner;
public class Test1{
	/*
	当前房贷的LRP年利率是4.65%,银行加点1.08%,键盘录入贷款总额,贷款年限(一年12期),
	然后利用以上公式计算出每月月供、还款总额、利息总额,并打印输出.
	
	名词解释:
    - LRP年利率:由18家银行报价去掉最高值去掉最低值取平均值,每月发布一次。
    - 加基点: 在LRP利率的基础上增加的点数,由商业银行自行定价。
    - 举例:当前LRP年利率为4.65%,银行增加1.08%个基点
    	   则购房的年利率 = 4.65%+1.08% =5.73% 

    //月利率 = (LRP年利率+增加基点)/12;
  	    
    //每月月供? = (贷款总额*月利率*Math.pow(1+月利率,还款期数))/(Math.pow(1+月利率,还款期数)-1);
	double 每月月供 = (贷款总额*月利率*Math.pow(1+月利率,还款月数))
    			/(Math.pow(1+月利率,还款月数)-1);
	
	//还款总额 = 每月月供 * 总期数;
	
	//利息总额 = 还款总额 - 贷款总额;
	*/
    public static void main(String[] args){
		Scanner sc = new Scanner(System.in);
        //键盘录入贷款总金额
        System.out.println("贷款总金额:");
		int loans = sc.nextInt();
		//键盘录入贷款年限
		System.out.println("贷款年限:");
		int year = sc.nextInt();
        //还款期数 = 还款年限*12
       int a = year * 12;
	   
        //月利率 = (0.0456+0.0108)/12
		double b = (0.0456+0.0108)/12;

        //每月月供 = (贷款总额*月利率*Math.pow(1+月利率,还款期数))/(Math.pow(1+月利率,还款期数)-1);
		double c = (loans * b*Math.pow(1+b,a))/(Math.pow(1+b,a)-1);

        //还款总额 = 每月月供 * 还款期数;
		double sum = c * a;

        //利息总额 = 还款总额 - 贷款总额;
		double d = sum - loans;		
		
		
        //打印总还款额、每月月供、利息总额
		System.out.println("总还款额:"+sum);
		System.out.println("每月月供:"+c);
		System.out.println("利息总额:"+d);

    }
}

运行效果如下


2. 购物小票

应用场景

	在大型的购物超市,付款的地方都会有收银系统,每次付款时,收银员会快速的录入商品的单价、数量、然后录入客户付款的金额,由系统算出应收金额和找零金额,并打印在小票上.

案例需求

需求:键盘录入一个商品的价格、数量、实收金额,计算出应收金额和找零金额,现在超市有一个促销活动,只要购物满100块立减30,满200立减50,满300立减100,编写程序完成这个功能

需求分析:
	1.看到键盘录入就应该想到键盘录入的三个步骤
		🤔 想一想是哪三个步骤啊(1分钟没有想出来,基本就想不出来了😔,不妨请求一下同桌的帮助)
	
	2.接下来分别录入价格、数量、实收金额
	3.计算应付金额 = 价格 * 数量
	4.判断应付金额是否满100,如果满100就立减30、满200立减50、满300立减100
		🤔 想一想判断应该用什么语句 (1分钟没有想出来,就看一下笔记,或问一下同桌)
	5.最后计算找零金额
		👍 找零金额 = 实收金额 - 应付金额
	
	6.将应付金额、实收金额、找零金额打印输出
import java.util.Scanner;

public class Test2{
	/*
	需求:键盘录入一个商品的价格、数量、实收金额,计算出应收金额和找零金额,
	现在超市有一个促销活动,只要购物满100块立减30,满200立减50,满300立减100,
	编写程序完成这个功能
	需求分析:
	1.看到键盘录入就应该想到键盘录入的三个步骤
		?? 想一想是哪三个步骤啊(1分钟没有想出来,基本就想不出来了??,不妨请求一下同桌的帮助)
	
	2.接下来分别录入价格、数量、实收金额
	3.计算应付金额 = 价格 * 数量
	4.判断应付金额是否满100,如果满100就立减30、满200立减50、满300立减100
		?? 想一想判断应该用什么语句 (1分钟没有想出来,就看一下笔记,或问一下同桌)
	5.最后计算找零金额
		?? 找零金额 = 实收金额 - 应付金额
	
	6.将应付金额、实收金额、找零金额打印输出*/
	public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
		System.out.println("请输入商品的价格:");
		double price = sc.nextDouble();
		System.out.println("请输入商品的数量:");
		int count = sc.nextInt();
		System.out.println("请输入实收金额:");
		double money = sc.nextDouble();
		double sum = price * count;//计算商品的总金额
		if(sum>=100&&sum<200){
			sum = sum -30;
		}else if(sum>=200&&sum<300){
			sum  = sum - 50;
		}else if(sum>=300){
			sum =sum -100;
		}
		double result = money - sum;
		System.out.println("应付金额:"+sum);
		System.out.println("实收金额:"+money);
		System.out.println("找零金额:"+result);
			
		
    }
} 

运行结果:

3. 活动倒计时

应用场景

	在双十一等各种节日,商家都会筹划各种促销活动,并且在网站首页的醒目位置,打出倒计时来吸引顾客参与活动。 就看谁✋快

时间小知识

	👍 计算机中的时间,都是用毫秒值进行计算的,毫秒值的时间原点是1970年1月1日0时0分0秒。也就是说当毫秒值为0时,表示的时间是1970年1月1日0时0分0秒;当毫秒值为为正数时,表示从时间原点开始往后过了多少毫秒;当时间毫秒值为负数时,表示从时间原点开始往前过了多少毫秒。

	👍 毫秒和其他时间单位的换算如下
        1秒钟=1000毫秒
        1分钟=60秒
        1小时=60分钟
        1天=24小时
        1年=365天 
    
    👍 通过下面的代码,可以获取当前系统时间的毫秒值(就是你电脑显示的时间)
    	long currentTime = System.currentTimeMillis();
    

如果不理解可以看下面的数轴,数轴的正方向表示时间流逝的方向。

1.已知20211111日的毫秒值为: 1636560000000; 
2.求当前距离2021年双11还有多长时间,输出格式如下
    "距离2021年双11购物狂欢节还有: xx天xx小时xx分钟xx秒"
    
需求分析:
    1.用一个变量start获取当前系统时间毫秒值
    2.用一个变量end表示双十一那天的毫秒值
    	//获取方式前面已经告诉你了
    3.计算双十一那天和当前系统时间的的时间间隔(单位毫秒)
    4.将时间间隔转换为 xx天xx小时xx分xx秒
    //🤔 天怎么算?   把间隔的毫秒转换成小时, 再算出这些小时中有几天? 
    				//举例:49小时,有2天
    
    //🤔 小时怎么算? 把间隔的毫秒转换成小时, 再算出这些小时中不足一天的有多少小时? 
    				//举例:49小时,其中不足一天的部分是1小时
    
    //🤔 分钟怎么算? 把间隔的毫秒转换为分钟,再算出这些分钟中不足一小时的有多少分?
    				//举例:65分,其中不足一小时的有5分钟
    
    //🤔 秒怎么算?  把间隔的毫秒转换为秒钟,再算出这些秒钟中不足一分的部分有多少秒? 
    				//举例:67秒,其中不足一分钟的部分有7秒
    
    👍 感觉优点小复杂o_o哦.... 相信经过你的思考能够算出来的 💪加油、💪加油、💪加油
    

代码实现

public class Test3{
	/*
	1.已知2021年11月11日的毫秒值为: 1636560000000; 
	2.求当前距离2021年双11还有多长时间,输出格式如下
    "距离2021年双11购物狂欢节还有: xx天xx小时xx分钟xx秒"
    
	需求分析:
		1.用一个变量start获取当前系统时间毫秒值
		2.用一个变量end表示双十一那天的毫秒值
			//获取方式前面已经告诉你了
		3.计算双十一那天和当前系统时间的的时间间隔(单位毫秒)
		4.将时间间隔转换为 xx天xx小时xx分xx秒
		//?? 天怎么算?   把间隔的毫秒转换成小时, 再算出这些小时中有几天? 
						//举例:49小时,有2天
		
		//?? 小时怎么算? 把间隔的毫秒转换成小时, 再算出这些小时中不足一天的有多少小时? 
						//举例:49小时,其中不足一天的部分是1小时
		
		//?? 分钟怎么算? 把间隔的毫秒转换为分钟,再算出这些分钟中不足一小时的有多少分?
						//举例:65分,其中不足一小时的有5分钟
		
		//?? 秒怎么算?  把间隔的毫秒转换为秒钟,再算出这些秒钟中不足一分的部分有多少秒? 
						//举例:67秒,其中不足一分钟的部分有7秒
		
		?? 感觉优点小复杂o_o哦.... 相信经过你的思考能够算出来的 ??加油、??加油、??加油
		
		?? 计算机中的时间,都是用毫秒值进行计算的,毫秒值的时间原点是1970年1月1日0时0分0秒。
		也就是说当毫秒值为0时,表示的时间是1970年1月1日0时0分0秒;当毫秒值为为正数时,
		表示从时间原点开始往后过了多少毫秒;当时间毫秒值为负数时,表示从时间原点开始往前过了多少毫秒。

	?? 毫秒和其他时间单位的换算如下
        1秒钟=1000毫秒
        1小时=60分钟
        1天=24小时
        1年=365天 
    
    ?? 通过下面的代码,可以获取当前系统时间的毫秒值(就是你电脑显示的时间)
    	long currentTime = System.currentTimeMillis();
	*/
    public static void main(String[] args){
		long start = System.currentTimeMillis();
		long betweenTime = 1636560000000L - start;
		long day  = betweenTime/1000/60/60/24;//计算剩余多少天
		long hour = betweenTime/1000/60/60%24;//计算剩余多少个小时
		long min = betweenTime/1000/60%60;//计算剩余多少分钟
		long sce = betweenTime/1000%60;//计算剩余多少秒
		System.out.println("距离2021年双11购物狂欢节还有:"+ day+"天"+hour+"小时"+min+"分钟"+sce+"秒");
		
       
    }
}

运行结果:

?? 通过下面的代码,可以获取当前系统时间的毫秒值(就是你电脑显示的时间)
	long currentTime = System.currentTimeMillis();
*/
public static void main(String[] args){
	long start = System.currentTimeMillis();
	long betweenTime = 1636560000000L - start;
	long day  = betweenTime/1000/60/60/24;//计算剩余多少天
	long hour = betweenTime/1000/60/60%24;//计算剩余多少个小时
	long min = betweenTime/1000/60%60;//计算剩余多少分钟
	long sce = betweenTime/1000%60;//计算剩余多少秒
	System.out.println("距离2021年双11购物狂欢节还有:"+ day+"天"+hour+"小时"+min+"分钟"+sce+"秒");
	
   }
}
分析并纠错:CREATE PROCEDURE 还书(in lb char(2),in dh int) BEGIN CASE lb WHEN '学生' THEN DECLARE sh CHAR(10) DECLARE hm varchar(20) set sh=(SELECT 图书号 FROM `学生借阅信息表` WHERE 订单号=dh); set hm=(SELECT 学号 FROM `学生借阅信息表` WHERE 订单号=dh); UPDATE 图书信息表 SET 库存=库存+1 WHERE 图书号=sh UPDATE 学生借阅信息表 SET `是否归还`=1,`还书时间`=NOW(),`是否超期`=DAY(NOW())-DAY(`应还时间`) where `图书号`=sh and `学号`=hm; UPDATE 图书统计表 SET `在借图书数量`=`在借图书数量`-1,`现存图书数量`=`现存图书数量`+1; IF (SELECT DAY(还书时间)-DAY(`应还时间`) FROM 学生借阅信息表 WHERE 订单号=dh)>0 then UPDATE 学生账单表 SET 待缴付=`待缴付`+5 WHERE 学号=hm; END IF; WHEN '教工' THEN DECLARE sh CHAR(10) DECLARE hm varchar(20) set sh=(SELECT 图书号 FROM `教师借阅信息表` WHERE 订单号=dh); set hm=(SELECT 教工号 FROM `教师借阅信息表` WHERE 订单号=dh); UPDATE 图书信息表 SET 库存=库存+1 WHERE 图书号=sh; UPDATE 教师借阅信息表 SET `是否归还`=1,`还书时间`=NOW(),`是否超期`=DAY(NOW())-DAY(`应还时间`) where `图书号`=sh and `教工号`=hm; UPDATE 图书统计表 SET `在借图书数量`=`在借图书数量`-1,`现存图书数量`=`现存图书数量`+1; IF (SELECT DAY(还书时间)-DAY(`应还时间`) FROM教工借阅信息表 WHERE 订单号=dh)>0 then UPDATE 教工账单表 SET 待缴付=`待缴付`+5 WHERE 教工号=hm; END IF; WHEN '教工' THEN END CASE; END;
06-01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值