目录
1、java8种基本数据类型
int 4B(4字节) 32b(32位) 所有的字面值是整数的,类型默认是int
char 2B 2字节 16b
short 2B 2字节 16b
long 8B 8字节 64b
float 4B 4字节 32b
double 8B 8字节 64b java程序里面所有字面值是小数的,默认类型都是double
byte 1B 1字节 8b
boolean 1B 1字节 8b
类型转换:
隐式类型转换:指编译器自己帮我们转换了
如果将一个小类型的数据赋值给一个大数据类型数据时,编译器就会自动 帮我们转换
所占字节数少的就是小类型,所占字节数多的就是大字节
byte->char->short->itn->long->double显式类型转换(强制类型转换):将某个数据转换成指定类型(类型)数据
存在数据丢失的危险
//显式转换
int pi = (int)3.12;
System.out.println(pi);
//隐式类型转换:
double d = 3; //不会造成数据丢失的,编译器会自动的进行转换,将3转换成double的3.0,将3.0赋值给d
byte b = 1;
int c = b;//先读取b值是byte类型,需要自动的将byte类型的1转换成int类型的1
double result = 1+2*3.0; //在一个表达式里面,如果出现类型不一致,编译器会自动将小数据类型转换成大数据类型
2、if..else
条件运算符
&& 与 条件1 && 条件2 当两个条件同时满足时,整个表达式成立 true
|| 或 条件1 || 条件2 当一个条件成立,整个表达式成立 true
! 非 !条件 条件不成立,表达式就成立;条件成立,表达式就不成立
练习:判断一个年份是否是闰年?
如果一个年份能被四整除但是不能被100整除,那么这个年份就是闰年;或者能被400整除是闰年
int year = 2013;
if ((year%4==0 && year%100!=0) || year%400==0){
System.out.println(year+":这是闰年");
}else {
System.out.println(year+":这是平年");
}
//运行结果是: 2013:这是平年
练习:输入一个数字[0-100]之间,判断这个分数对应的等级
数字:[90,100] 打印A
[80,90) 打印B
[70,80) 打印C
[60,70) 打印D
[0,60) 打印E
//java中输入数据
//创建一个读取器、扫描器,用来从控制台读取数据
Scanner sc = new Scanner(System.in);
//利用扫描器从控制台读取一个整数,然后将这个数字赋值给grade
System.out.println("请输入一个分数[0,100]:");
int grade = sc.nextInt();
//方式一:
if (90 < grade && grade <= 100){
System.out.println("A");
}else if (80 <= grade && grade < 90) {
System.out.println("B");
}else if (70 <= grade && grade < 80) {
System.out.println("C");
}else if (60 <= grade && grade < 70) {
System.out.println("D");
}else if (0 <= grade && grade < 60) {
System.out.println("E");
}
//方式二:
if (90 < grade && grade <= 100){
System.out.println("A");
}else if (80 <= grade) {
System.out.println("B");
}else if (70 <= grade) {
System.out.println("C");
}else if (60 <= grade) {
System.out.println("D");
}else if (0 <= grade) {
System.out.println("E");
}
3、Switch
switch(变量){
case 值1:分支1要执行的代码;break;
case 值2:分支2要执行的代码;break;
....
case 值n:分支n要执行的代码;break;
default:除开以上情况以外的执行这里的代码
}
switch:选择
case:分支
break:打断
default:默认
执行逻辑:用变量的值与下面每一个case后面的值进行比较,如果一样就执行该case后面 的代码
如果所有的case后面的值都与变量不一样,就执行default后面的代码
案例:要求用户输入一个数字[1,7],判断那一天限哪些号
输入 输出
1 1,6
2 2,7
3 3,8
4 4,9
5 5,0
6/7 不限号
//1 创建扫描器
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字[1,7]");
int day = sc.nextInt();
switch (day){
case 1: System.out.println("限号:1,6");break;
case 2: System.out.println("限号:2,7");break;
case 3: System.out.println("限号:3,8");break;
case 4: System.out.println("限号:4,9");break;
case 5: System.out.println("限号:5,0");break;
default:System.out.println("周末不限号");
}
//注意:分支不能出现重复的
4、案例练习
1、交换两个变量的值:例如 int a = 10,b = 20, 交换值 a = 20,b = 10
// 方式一:利用第三个变量进行值得交换
int a = 10;
int b = 20;
int c = a; //c:10 a:10
a = b; //a:20 b:20
b = c; //b:10 C:10
System.out.println("a = "+a+";b = "+b);
//方式二:不用第三个变量实现两个变量值得交换
int n = 10;
int m = 20;
n = n + m; //n:30 m:20
m = n - m; //m:10 n:30
n = n - m; //n:20 m:10
System.out.println("n = "+n+";m = "+m);
//方式三:
int i = 10; //i: 01010
int j = 20; //j: 10100
i = i ^ j; //i: 11110
j = i ^ j; //j: 01010 10
i = i ^ j; //i: 10100 20
System.out.println("i = "+i+";j = "+j);
2、要求根据一个年份和一个月份,判断这个月有多少天?(考虑闰年情况)
方式一:
利用switch来实现
思路:不管闰年还是平年都按照平年来计算,然后当月份是2月份的时候在判断闰年
每一个case后面都可以加上{},在里面编写多条代码
int year = 2012;
int month = 4; //考虑闰年
switch (month){
case 1: System.out.println(31);break;
case 2: {
//判断闰年还是平年
if ((year%4 == 0 && year%100 != 0) || year%400 == 0){
System.out.println(29);
}else{
System.out.println(28);
}
};break;
case 3: System.out.println(31);break;
case 4: System.out.println(30);break;
case 5: System.out.println(31);break;
case 6: System.out.println(30);break;
case 7: System.out.println(31);break;
case 8: System.out.println(31);break;
case 9: System.out.println(30);break;
case 10: System.out.println(31);break;
case 11: System.out.println(30);break;
case 12: System.out.println(31);break;
}
方式二:
1.每一个case不一定必须按照顺序罗列
2.break 打断、中断:如果匹配到某个case,程序会执行它后面的代码
执行完成后如果有break那么就不再执行其他case,如果没有break它会继续执行
下一个case后面的代码,知道遇到一个break或者整个switch结束才会停止
//如果有分支要执行相同的代码,前几个分支可以不用写代码、break
//只需要在最后一个分支写上共同的代码、break
switch (month){
case 2: {
//判断闰年还是平年
if ((year%4 == 0 && year%100 != 0) || year%400 == 0){
System.out.println(29);
}else{
System.out.println(28);
}
};break;
case 4:
case 6:
case 9:
case 11:
System.out.println(30);break;
default:
System.out.println(31);
}
3、 编写程序模拟ATM机操作
/**
* 编写程序模拟ATM机操作
* 1.输入密码,验证密码
* 2.显示主界面
* 3.选择相应的操作,进行下一步操作
* 4.退卡
*/
public class ATM_Test {
public static void main(String[] args) {
//余额
int money = 1000000;
Scanner sc = new Scanner(System.in);
//输入密码
System.out.println("please input your password");
int pwd = sc.nextInt();//读取到密码
//判定密码是否正确
if (pwd==123456){
//验证成功
System.out.println("欢迎使用");
//显示主页面
System.out.println("[1] 取钱");
System.out.println("[2] 存钱");
System.out.println("[3] 查询");
System.out.println("[0] 退卡");
System.out.println("请选择您的操作");
int choose = sc.nextInt();
switch (choose){
case 1: {
System.out.println("请输入取款金额");
int getMoney = sc.nextInt();
if (getMoney>money){
System.out.println("余额不足");
}else {
System.out.println("请取走你的钞票");
money-=getMoney;
System.out.println("余额为:"+money);
}
}
break;
case 2: {
System.out.println("请输入存款金额");
int getMoney = sc.nextInt();
money += getMoney;
System.out.println("余额为:"+money);
}
break;
case 3: {
System.out.println("查询余额");
}
break;
case 0:
System.out.println("退卡");
break;
default:
System.out.println("你的操作有误");
}
}else {
//验证失败
System.out.println("密码错误");
}
}
}
5、思考题
现有一堆砝码、重量任意(整数:克),要求使用最少的砝码能将[1,100]之前所有的重量都能称出来
最优:没有重复重量的代码、数量尽量少