HM-Day 02
5 - 29
数据类型的大小顺序
byte --->short(char)---->int---> long---> float---> double
1字节 2字节 4字节 8字节 4字节 8字节
- 小的数据类型是可以直接转为大的数据类型(隐式类型转换);
- 大的数据类型是不可以直接转为小的数据类型,需要在需要转换的值前加“(数据类型)”才可以(强制类型转换);
注意:
- 强制类型转换会损失精度,不建议使用;
- 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;
混合使用:要看++或者–用在操作数前面还是后面;
- ++或者–在前:先自增或者自减,再做其他运算
举例:
int a = 3;
int b = ++a;//等价于a++;int b = a;
-
++或者–在后:先做其他运算,再自增或者自减
举例:
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
!: true变false; false变true
^: 两边相同则为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.已知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哦.... 相信经过你的思考能够算出来的 💪加油、💪加油、💪加油
代码实现
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+"秒");
}
}