零、 复习昨日
一、流程控制语句
1 解释/(除法)的特殊点
- 整数相除取整,不保留小数
2 i++和++i有什么相同点和不同点
- 相同点:都会自增1
- 不同点:++在后i就先使用后自增,++在前i就自增再使用
3 && 短路与,是如何短路的?
- & 一错就错,但是后面表达式还会执行
- && 一错就错,但是如果前面式子已经是false,后面式子不再执行
4 三目运算的语法结构和执行顺序
- 语法结构: 表达式 ? 值1 : 值2;
- 执行顺序:1) 先执行表达式2)根据结果,true执行值13)false时执行值2
5 解释代码
byte b = 1;
b = b + 1; // 这行代码有什么问题?
程序出现的任何整型都是int,即1是int
b是byte
执行加法后,结果的类型是int
但是赋值给byte类型的变量b,就会出现类型不匹配
此时会报错,需要强转 b = (byte)(b+1);
6 运算符的优先级
boolean r = a + 1 > b && (a < b || a + b < 0);
7 关系式子写法
数学上,表示一个范围,价格x在1000~2000之间,1000 < x < 2000;
在java中,不能这么写,需要分开写
x > 1000 && x < 2000
public static void main(String[] args) {
// 华氏温度 = (摄氏温度 × 9/5) + 32
// 编写一个程序,从用户输入的摄氏温度中将其转换为华氏温度,并显示结果。
Scanner scanner = new Scanner(System.in);
System.out.println("输入摄氏温度" );
double t = scanner.nextDouble();
double h = (t * 9 / 5) + 32;
System.out.println("对应华氏温度:" + h );
}
目前程序的执行流程
- 从main方法开始
- 方法内每一行从上执行依次执行
流程控制: 所谓控制就是可以改变原有的顺序,例如
- 可以跳过某行代码不执行
- 也可以让某行代码一直执行
流程控制语句有哪些?
- 分支语句
- if
- if-else
- if-elseif
- 选择语句
- switch[了解]
- 循环语句
- while
- dowhile
- for
if是如果的意思,作用用来判断一个条件,从而决定一个代码是否执行
语法:
if (布尔表达式) {
执行语句;
}
作用:
- 代码执行到if,就会判断表达式,
- 如果表达式结果是true,就会执行{}内的代码,继续执行后续的
- 如果表达式结果是false,就会跳过{}内代码不执行,直接执行后续的
练习: 根据年龄,判断是否可以考驾照,如果年龄大于等于18岁,就输出可以考
public static void main(String[] args) {
// 练习: 根据年龄,判断是否可以考驾照,
// 如果年龄大于等于18岁,就输出可以考
// int age = 20;
// if (age > 18) {
// System.out.println("可以考驾照" );
// }
// System.out.println("你好" );
// 升级: 根据年龄,判断是否可以考驾照,
// 如果年龄大于等于18岁并且小于等于70,就输出可以考
int age = 120;
if (age >= 18 && age <= 70) {
System.out.println("考驾照" );
}
System.out.println("你好" );
}
二选一执行
package com.qf.ctrl;
/**
* --- 天道酬勤 ---
* --- 代码敲烂 月薪过万 ---
*
* @author QiuShiju
* @desc if-else
*/
public class Demo2 {
public static void main(String[] args) {
/**
* if-else语句,二选一执行
* if是如果,else否则,其他的
* --------------------
* if (布尔表达式) {
* 执行语句1;
* } else {
* 执行语句2;
* }
*---------------------------
* 1) 执行到if,先执行表达式判断
* 2) 如果表达式是true就执行if后的{}内的语句1,不执行else里面语句2
* 3) 如果表达式是false,就跳过if转而else后{}语句2
*/
int age = 120;
if (age >= 18 && age <= 70) {
System.out.println("可以考驾照");
} else {
System.out.println("不可以考" );
}
System.out.println("-------------------------" );
// 定义两个变量,输出其中较大值
int a = 1;
int b = 2;
if(a > b) {
System.out.println("a大,a = " + a );
} else {
System.out.println("b大,b = " + b );
}
System.out.println("-------------------------" );
// 声明一个int型的数据,判断这个数是否能被2整除,
// 如果能被2整除,那么输出“这个数是偶数”,
// 否则输出“这个数是奇数”。
int x = 8;
if (x % 2 == 0) {
System.out.println(x + "是偶数" );
} else {
System.out.println(x + "是奇数" );
}
System.out.println("-------------------------" );
// 判断一个整数是否为正数。
// 如果是正数,打印"这是一个正数",
// 否则打印"这不是一个正数"。
int y = 5;
if (y > 0) {
System.out.println(y + "是一个正数" );
} else {
System.out.println(y + "不是正数" );
}
System.out.println("-------------------------" );
// 定义三个变量,输出其中较大值
int i = 1;
int j = 2;
int k = 3;
if (i > j) {
if (i > k) {
System.out.println("i最大,i="+i );
} else {
System.out.println("k最大,k="+k );
}
} else {
if (j > k) {
System.out.println("j最大,j="+j );
} else {
System.out.println("k最大,k="+k );
}
}
System.out.println("-------------------------" );
// 判断一个整数是否为正数负数或者0。
// 如果是正数,打印"这是一个正数",
// 如果是0,打印"是0"。
// 如果是负数,打印"这是一个负数"。
int q = 1;
if (q > 0) {
System.out.println("q是正数" );
} else {
if (q < 0) {
System.out.println("q是负数" );
} else {
System.out.println("q是0" );
}
}
}
}
需求: 老人电话,数字按钮变量, 长按1输出打给儿子,长按2输出打给女儿,长按3输出打给老伴儿,长按输出4报警
package com.qf.ctrl;
/**
* --- 天道酬勤 ---
* --- 代码敲烂 月薪过万 ---
*
* @author QiuShiju
* @desc
*/
public class Demo3 {
public static void main(String[] args) {
// ---- 使用if-else实现 ----
// 需求: 老人电话,数字按钮变量,
// 长按1输出打给儿子,长按2输出打给女儿,
// 长按3输出打给老伴儿,长按输出4报警
int num = 1;
if (num == 1) {
System.out.println("打给儿子" );
} else {
if (num == 2) {
System.out.println("打给女儿" );
} else {
if (num == 3) {
System.out.println("打给老伴儿" );
} else {
if (num == 4) {
System.out.println("报警" );
} else {
System.out.println("正常按键..." );
}
}
}
}
System.out.println("-----------------------------" );
/**
* if-elseif: 多分支语句,多选一
* 语法:
* if(布尔表达式1) {
* 执行语句1;
* } else if(布尔表达式2){
* 执行语句2;
* } else if(布尔表达式3) {
* 执行语句3;
* } ... {
* 执行语句n
* } else {
* 执行语句;
* }
* 执行流程:
* 1) 先执行到if,判断
* 2) 结果是true,执行第一个语句,后续else直接跳过不执行
* 3) 结果是false,执行第二个elseif后判断,结果为true,执行语句2,如果是false
* 4) 执行第三个elseif后判断,以此类推
* ...
* 5) 如果以上所有的判断都不成立,执行最后一个else
*/
// 需求: 老人电话,数字按钮变量,
// 长按1输出打给儿子,长按2输出打给女儿,
// 长按3输出打给老伴儿,长按输出4报警,其他按键输出正常按键...
int x = 1;
if (x == 1) {
System.out.println("打给儿子" );
} else if (x == 2) {
System.out.println("打给女儿" );
} else if (x == 3) {
System.out.println("打给老伴儿" );
} else if (x == 4) {
System.out.println("打给经常" );
} else {
System.out.println("正常输出" );
}
System.out.println("-----------------------------" );
// 判断一个正常是 正数,负数,0
int y = -1;
if (y > 0) {
System.out.println("正数" );
} else if (y < 0) {
System.out.println("负数" );
} else {
System.out.println("等于0" );
}
}
}
switch case语句
- switch选择,转换的意思
- case 情况,案例的意思
语法
switch(数值) { case: 值1 执行语句; break; case: 值2 执行语句; break; ... default: 执行语句; }
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
package com.qf.ctrl;
/**
* --- 天道酬勤 ---
* --- 代码敲烂 月薪过万 ---
*
* @author QiuShiju
* @desc
*/
public class Demo5 {
public static void main(String[] args) {
/**
* switch是拿着后面的数字和case后的数字做等值比较
* 相等的话执行其后的代码,其他的不再执行
* 如果不相等,继续判断下一个case
* 如果所有case都不相等,执行default内
*/
// 需求: 老人电话,数字按钮变量,
// 长按1输出打给儿子,长按2输出打给女儿,
// 长按3输出打给老伴儿,长按输出4报警,其他按键输出正常按键...
int num = 1;
switch (num) {// 此处支持类型byte short int char,及字符串,枚举
case 1:// case后类型必须和switch后一致
// case后只能是定值
// case后是冒号
System.out.println("打给儿子" );
// break; // 其实可写可不写
// 但是不写break,会造成case击穿
// 即break的作用是用来结束当前switch执行
case 2:
System.out.println("打给女儿" );
break;
case 3:
System.out.println("打给你" );
break;
case 4:
System.out.println("打给警察" );
default:
System.out.println("正常按键" );
}
/**
* switch整体语法不是重点
* 但是break这个特性需要记住: 用来结束当前结构执行
*/
}
}
声明一个int型的数据,判断这个数是否能被2整除,如果能被2整除,那么输出“这个数是偶数”,否则输出“这个数是奇数”。
判断一个整数是否为正数。如果是正数,打印"这是一个正数",否则打印"这不是一个正数"。
给定两个整数,比较它们的大小并打印结果。如果第一个数较大,输出"第一个数较大",如果第二个数较大,输出"第二个数较大",如果两个数相等,输出"两个数相等"。
给定一个成绩,根据成绩的范围打印相应的等级。90及以上为"A级",80-89为"B级",70-79为"C级",60-69为"D级",60以下为"E级"。
编写一个程序,根据用户输入的月份,判断该月份的天数并输出。假设输入的月份范围为1到12。
package com.qf.ctrl;
import java.util.Scanner;
/**
* --- 天道酬勤 ---
* --- 代码敲烂 月薪过万 ---
*
* @author QiuShiju
* @desc 练习
*/
public class Demo4 {
public static void main(String[] args) {
// 给定两个整数,比较它们的大小并打印结果。
// 如果第一个数较大,输出"第一个数较大",
// 如果第二个数较大,输出"第二个数较大",
// 如果两个数相等,输出"两个数相等"。
int a = 2;
int b = 2;
if (a > b) {
System.out.println("a > b" );
} else if (a < b) {
System.out.println("b > a" );
} else {
System.out.println("a == b" );
}
System.out.println("--------------" );
// 给定一个成绩,根据成绩的范围打印相应的等级。
// 90及以上为"A级",80-89为"B级",70-79为"C级",
// 60-69为"D级",60以下为"E级"。
int score = 90;
if (score >= 90) {
System.out.println("A级" );
} else if (score >= 80) {
System.out.println("B级" );
} else if (score >= 70) {
System.out.println("C级" );
} else if (score >= 60) {
System.out.println("D级" );
} else {
System.out.println("E级" );
}
System.out.println("--------------" );
// 编写一个程序,根据用户输入的年份,月份,
// 判断该月份的天数并输出。考虑平年和闰年情况
// 假设输入的月份范围为1到12。
// 常识:
// 闰年: 年份能被4整除,且不能被100整除,或者能被400整除的年份
// 月份: 13578十腊,31天永不差
// 其他30天,闰年2月29天,平年28天
/**
* 整体思路:
* 先判断月份,再判断年份
* 因为只有2月特殊,所有只在2月份里面判断平年闰年
* 考虑健壮性,即一些特殊情况也有给出提示
*/
Scanner scanner = new Scanner(System.in);
System.out.print("请输入年份:" );
int year = scanner.nextInt();
if (year > 0) {
System.out.print("请输入月份:" );
int month = scanner.nextInt();
if (month >= 1 && month <= 12) {
if (month == 2) {
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
System.out.println(year+"是闰年,2月,有29天" );
} else {
System.out.println(year+"是平年,2月,有28天" );
}
} else if (month == 4 || month == 6 || month == 9 ||month == 11) {
System.out.println(year+"年,"+month +"月,有30天" );
} else {
System.out.println(year+"年,"+month +"月,有31天" );
}
} else {
System.out.println("输入合适的月份!" );
}
} else {
System.out.println("年份有误!" );
}
}
}
以后最常用的是if和ifelse
敲代码习惯, 不要偷懒,多敲
关于作业,只看题目自己完成,不要照抄
如果是要照抄也要自己加注释