今日内容
1.if
2.switch
3.while,do-while,for
零、复习
1算术运算符中除法特性
- 整数相除不保留小数 10/3=3
2++什么作用,i++和++i什么区别
- 让数据自增1
- i++,是++在后先使用后自增
- ++i,是++在前先自增后使用
3&& 和 & 有相同点和不同点
- 相同点: 两边判断式子,一错就错全对才对
- 不同点: &&有短路效果,当第一个式子结果错的时候后面式子不执行
4三目运算的语法格式
- 数据类型 变量 = 布尔表达式 ? 对时执行 : 错时执行;
- String s = a > b ? “a大” : “b大”;
5解释如下代码的错误
short s = 1;
s = s + 1;
- s是short类型变量,数字1int类型
- s+1执行完,结果的数据类型是int
- 将int结果赋值给s变量,但是s变量是short类型,即int类型转成short
- 但是int到short默认不行,所以报错
- 解决方案: s = (short)(s + 1);
- 或者 s += 1;
一、流程控制语句
流程: java的执行流程(从main方法中从上至下,逐行执行)
控制: 通过一些技术改变这些流程(选择的执行,跳过不执行,循环重复执行)
能实现流程控制的语句有
- 分支语句: if,if-else,elseif
- 选择语句: switch-case
- 循环语句: while,do-while,for
二、分支语句(重要)
2.1 if(单分支)
if (布尔表达式) {
执行语句;
}
- 遇到if,就开始判断后面式子
- 如果式子是true 就执行{}内语句
- 如果式子false 就跳过{}内不执行,而后续的
// 判断能不能进入网吧??
int age = 8;
if (age >= 18) {
System.out.println("可以上网,欢迎光临~" );
}
2.2 if-else(双分支)
if(布尔表达式) {
执行语句;
} else {
执行语句;
}
- 遇到if,执行判断
- 结果为true.执行if后的语句,不再执行else
- 结果为false.跳过if执行else后的语句
int age2 = 8;
if (age2 >= 18) {
System.out.println("可以上网!" );
} else {
System.out.println("不可以上网!" );
}
2.3 练习题
package com.qf.contrl;
import java.util.Scanner;
/**
* --- 天道酬勤 ---
*
* @author QiuShiju
* @date 2024/2/22
* @desc if和if-else的练习
*/
public class Demo2 {
public static void main(String[] args) {
// 定义两个变量,输出其中最大值(不考虑相等)
int a = 1;
int b = 2;
if (a > b) {
System.out.println("max is a = " + a);
} else {
System.out.println("max is b = " + b);
}
// 定义三个变量,输出其中最大值(不考虑相等)
int x = 11;
int y = 22;
int z = 3;
if (x > y) {
if (x > z) {
System.out.println("x大" );
} else {
System.out.println("z大" );
}
} else {
if (y > z) {
System.out.println("y大" );
} else {
System.out.println("z大" );
}
}
// 声明一个int型的数据,判断这个数是否能被2整除,如果能被2整除,那么输出“这个数是偶数”,否则输出“这个数是奇数”。
int num = 2;
if (num % 2 == 0) { // 整除就是余数为0
System.out.println("num = " + num+",是偶数" );
} else {
System.out.println("num = " + num+",是奇数" );
}
// 编写一个程序,输入用户名和密码,
// 要求用户名和密码同时正确才输出"登录成功",
// 否则输出"用户名或密码错误"
// 假设正确的用户名是数字1,密码是数字2
System.out.println("--- xxx系统 ----" );
Scanner scanner = new Scanner(System.in);
System.out.println("请输入用户名:" );
int username = scanner.nextInt( );// 用户名
System.out.println("请输入密码:" );
int password = scanner.nextInt( );// 密码
if (username == 1 && password == 2) {
System.out.println("登录成功,欢迎进入xxx系统" );
} else {
System.out.println("用户名或密码错误!" );
}
}
}
2.4 elseif(多分支)
语法
if(布尔表达式1) { 执行语句1; } else if(布尔表达式2){ 执行语句2; } else if(布尔表达式3){ 执行语句3; } ... { } else { 执行语句n; }
执行顺序:
- 遇到if执行判断,如果为true,执行if后语句1,后面的都不再执行
- 如果if是false,跳过语句1,判断第二个if,如果此时为true,执行语句2,后面不再执行
- 如果判断2为false,跳过语句2,执行第三个判断…
- 依次类推
- 如果以上判断都失败,就执行最后的else
给定一个成绩,根据成绩的范围打印相应的等级。90及以上为"A级",80-89为"B级",70-79为"C级",60-69为"D级",60以下为"E级"。
int score = 92;
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" );
}
给定两个整数,比较它们的大小并打印结果。如果第一个数较大,输出"第一个数较大",如果第二个数较大,输出"第二个数较大",如果两个数相等,输出"两个数相等"。
int x = 11;
int y = 22;
if (x > y) {
System.out.println("x > y" );
} else if (x < y) {
System.out.println("x < y" );
} else {
System.out.println("x == y" );
}
编写一个程序,根据用户输入的月份,判断该月份的天数并输出。假设输入的月份范围为1到12。
Scanner scanner = new Scanner(System.in);
System.out.println("请输入月份:");
int month = scanner.nextInt( );// 月
if (month >= 1 && month <= 12) {
if (month == 2) {
System.out.println("28天或者29天");
} else if (month == 4 || month == 6 || month == 9 || month == 11) {
System.out.println("30天");
} else {
System.out.println("31天");
}
} else {
System.out.println("输入的月份有误!!!");
}
三、选择语句(switch,了解)
类似于else-if,实现多选一的效果,语法
switch(值){ case 值: 执行语句; break; case 值: 执行语句; break; ... default: 执行语句; }
switch: 转换,选择 case: 情况,案例 break: 破坏打断 default: 默认
package com.qf.contrl;
/**
* --- 天道酬勤 ---
*
* @author QiuShiju
* @date 2024/2/22
* @desc 演示switch
*/
public class Demo4 {
public static void main(String[] args) {
// 老年机打电话,长按1打给110
// 长按2打给120,长按3打给119
// 其他打给儿子/女儿
int num = 1;
switch (num) { // ()内是数值,不能写判断式子
case 1: // case后是定值,不能写变量,后面是冒号:
System.out.println("打给110" );
break; // break可以不写,不写的话会造成case击穿
case 2:
System.out.println("打给120" );
break;
case 3:
System.out.println("打给119" );
break;
default: // 以上case都不成立,执行此处
System.out.println("打给孩子们!!" );
}
}
}
四、循环语句
循环语句的作用: 就是能代码循环重复执行
为什么? 提供效率…减少代码重复的
如何实现重复循环?
- while循环
- do-while循环
for循环
4.1 while
while(布尔表达式){
执行语句;
}
执行流程:
- 遇到while,判断式子
- 如果为true,执行{}内语句,回头继续再判断
- 直到当判断结果为false时跳出循环
练习题
package com.qf.contrl;
/**
* --- 天道酬勤 ---
*
* @author QiuShiju
* @date 2024/2/22
* @desc while语句
*/
public class Demo5 {
public static void main(String[] args) {
// 输出5遍 I Love China.
System.out.println("-- 输出5遍 I Love China. --" );
int i = 1;
while (i <= 5) {
System.out.println("I Love China");
i++;
}
/**
* 一个合适的循环,需要有四部分
* 1) 循环初始值
* 2) 循环控制条件
* 3) 循环内容
* 4) 循环迭代
*/
// 输出1-10
System.out.println("-- 输出1-10 --" );
int a = 1;
while (a < 11) {
System.out.println(a );
a++;
}
// 输出10-1
System.out.println("-- 输出10-1 --" );
int b = 10;
while (b > 0) {
System.out.println(b );
b--;
}
// 输出1-100中既能被3整除又能被5整除的所有数
System.out.println("-- 输出1-100中既能被3整除又能被5整除的所有数 --" );
int c = 1;
while (c < 101) {
if (c % 3 == 0 && c % 5 == 0){
System.out.println(c );
}
c++;
}
// 找出1~2024年中所有的闰年
// (年份能被4整除,且不能被100整除,或者能被400整除的年份)
System.out.println("-- 找出0~2024年中所有的闰年 --" );
int year = 1;
while (year <= 2024) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
System.out.println(year+"年是闰年!" );
}
year++;
}
}
}
4.2 do-while(了解)
do {
执行语句;
}while(布尔表达式);
package com.qf.contrl;
/**
* --- 天道酬勤 ---
*
* @author QiuShiju
* @date 2024/2/22
* @desc do-while
*/
public class Demo6 {
public static void main(String[] args) {
// 输出1-10
int a = 1;
do {
System.out.println(a );
a++;
}while (a < 11);
// 输出1-100的偶数
int b = 1;
do {
if (b % 2 == 0){
System.out.println(b );
}
b++;
}while (b < 101);
/**
* while和do-while区别
* 1 while是先判断后执行
* 2 dowhile是先执行一次再判断
*/
}
}
4.3 for(重点
)
for循环是使用的最多的循环语句!!!
语法
for(初始值;控制条件;迭代){
执行语句;
}
练习
package com.qf.contrl;
/**
* --- 天道酬勤 ---
*
* @author QiuShiju
* @date 2024/2/22
* @desc for循环
*/
public class Demo7 {
public static void main(String[] args) {
// 输出1-10
for (int i = 1; i < 11; i++) {
System.out.println(i);
}
// 求出1-10的和
int sum = 0;
for (int i = 1; i < 11; i++) {
// sum = i + sum;
sum += i;
}
System.out.println("1-10的和:sum = " + sum);
// 求出1-100的奇数和
int sum2 = 0;
for (int i = 1; i < 101; i++) {
if (i % 2 == 1) {
sum2 += i;
}
}
System.out.println(sum2);
}
}
4.4 for循环嵌套[熟练]
public static void main(String[] args) {
System.out.print("输出后不换行");
System.out.println("输出内含后,会换行");
// -------------
/**
* 要求输出数据只能输出一颗*
* 打印出正方形
* *********
* *********
* *********
* *********
*/
// 外层循环控制行数
for(int i = 1;i < 5;i++) {
// 内层循环控制列数
for (int j = 1; j < 10; j++) {
System.out.print("*");// 输出后不换行
}
System.out.println( );// 纯换行
}
/**
* *
* **
* ***
* ****
* *****
* ******
*/
for(int i = 1;i < 7;i++) {
for(int j = 1;j <= i;j++) {
System.out.print("*");
}
System.out.println( );
}
}
五、总结
今日重点
- if和if-else
- while和for循环