01-switch语句
-
格式 :
switch (将要匹配的值) { case 值1 : 语句体1; break; case 值2 : 语句体2; break; ... default: 语句体n+1; break; }
-
执行流程 :
1. 拿着 () 中将要匹配的值, 跟case后面给出的选项, 逐个进行匹配 匹配成功, 就执行对应的语句体, 再由break关键字, 结束整个switch 2. 如果给出的所有case, 都匹配失败了, 将会执行最后default.
-
注意事项 :
1. case 后面的值不允许重复 2. case 后面的值只能是常量, 不能是变量 3. switch 语句 () 中可以接收的类型 1). 基本数据类型 : byte short char int 2). 引用数据类型 : jdk5版本开始, 可以是枚举 jdk7版本开始, 可以是String字符串 4. 如果省略了break, switch将会开启case穿透现象
-
案例 :
import java.util.Scanner;
public class SwitchDemo2 {
/*
switch语句中, 省略了break关键字, 将会开启case穿透现象
---------------------------------------------------
需求: 键盘录入一个数值, 1~5输出工作日, 6~7输出休息日
情况: 多个case中, 存在着相同的代码, 这时候就可以考虑使用 case穿透来优化代码
---------------------------------------------------
jdk14开始, case后面允许编写多个选项, 需要使用逗号进行分割
*/
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入:");
int week = sc.nextInt();
switch (week) {
case 1, 2, 3, 4, 5:
System.out.println("工作日");
break;
case 6, 7:
System.out.println("休息日");
break;
default:
System.out.println("您的输入有误");
break;
}
}
}
分支语句的使用选择 :
if : 适用于范围性的判断
switch : 适用于固定值的匹配
02-for循环语句
问题 : 为什么要学习循环 ?
发现一段逻辑需要重复的执行很多次, 就可以使用循环解决
-
for循环格式 :
for(初始化语句; 判断条件; 条件控制语句) { 循环体语句; } 初始化语句 : 定义变量 (定义出变量, 准备控制循环) 判断条件 : 根据这个判断条件决定循环是否要继续 循环体语句 : 要重复执行的代码 条件控制语句 : 改变控制循环的那个变量
-
执行流程 :
1. 执行初始化语句, 在整个循环过程中, 只执行一次 2. 执行判断条件, 看其返回结果是true, false false : 循环结束 true : 进入第三步 3. 执行循环体语句 4. 执行条件控制语句 5. 回到2继续
for(int i = 1; i <= 3; i++){
System.out.println("跑圈");
}
案例1 : 模拟计时器
public class ForTest1 {
/*
需求: 在控制台打印 1~3 和 3~1
积累思路:
1, 用于控制循环的变量, 可以在循环体内部继续使用
2, 循环的条件控制语句, 不要局限的认为只能是++
*/
public static void main(String[] args) {
for (int i = 1; i <= 3; i++) {
// i = 1, 2, 3
System.out.println(i);
}
System.out.println("------------------");
for (int i = 3; i >= 1; i--) {
// i = 3, 2, 1
System.out.println(i);
}
}
}
案例2 : 求和
public class ForTest3 {
/*
需求:求1-100之间的偶数和,并把求和结果在控制台输出
积累思路: 今后只要需求涉及到求和操作, 就要联想到求和变量 int sum = 0;
*/
public static void main(String[] args) {
// 1. 定义求和变量sum, 准备记录求和的结果
int sum = 0;
// 2. 通过for循环, 获取1~100之间的每一个数字
for (int i = 1; i <= 100; i++) {
// 3. 在循环中加入if判断, 筛选出偶数
if (i % 2 == 0) {
// 4. 将每一个偶数, 和sum求和变量累加
sum += i;
}
}
// 5. 在循环结束后, 将最终的求和结果打印在控制台
System.out.println("1~100之间的偶数和为:" + sum);
System.out.println("----------------------------");
int result = 0;
for (int i = 2; i <= 100; i += 2) {
// i = 2, 4, 6, 8, 10....
result += i;
}
System.out.println("1~100之间的偶数和为:" + result);
}
}
案例3 : 水仙花数
public class ForTest4 {
/*
需求:在控制台输出所有的“水仙花数”
1. 水仙花数, 是三位数
2. 个位立方 + 十位立方 + 百位立方 == 原数据
*/
public static void main(String[] args) {
// 1. 通过循环, 获取到所有的三位数
for (int i = 100; i <= 999; i++) {
// i : 每一个三位数
// 2. 将每一个三位数拆分出个位,十位,百位
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100;
// 3. 加入if筛选
if (ge * ge * ge + shi * shi * shi + bai * bai * bai == i) {
// 4. 打印水仙花数
System.out.println(i);
}
}
}
}
案例4 : 统计思想
public class ForTest6 {
/*
需求:在控制台打印出所有的水仙花数, 要求一行中, 展示两个数字
153 370
371 407
铺垫知识点 :
System.out.println(); : 打印数据后, 有换行操作
System.out.print(); : 打印数据后, 没有换行
*/
public static void main(String[] args) {
// 1. 定义计数器变量, 用于统计打印了几个数字
int count = 0;
for (int i = 100; i <= 999; i++) {
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100;
if (ge * ge * ge + shi * shi * shi + bai * bai * bai == i) {
System.out.print(i + " ");
// 2. 每打印一个, 计数器增长一次
count++;
// 3. 每一次增长, 都要去判断, 是否应该换行
if (count % 2 == 0) {
// 换行
System.out.println();
}
}
}
}
}
循环嵌套 :
在循环中, 继续编写循环语句
阅读循环嵌套代码的思路 : 先看懂内循环, 然后再看外循环
for(int i = 1; i <= 3; i++){
for(int j = 1; j <= 5; j++){
System.out.println("HelloWorld");
}
}
-
练习 :
打印九九乘法表
public class ForTest8 {
/*
需求: 在控制台打印出99乘法表
1*1=1
1*2=2 2*2=4
1*3=3 2*3=6 3*3=9
1*4=4 2*4=8 3*4=12 4*4=16
1*5=5 2*5=10 3*5=15 4*5=20 5*5=25
...
*号左边的数据 : 每一行, 都是从1开始逐个 + 1增长 j
*号右边的数据 : 每一行中, 乘号右侧的数据, 都是固定不变的 i
1. 9行9列的矩形
2. 改进为直角三角形
3. 改进为99乘法表
*/
public static void main(String[] args) {
for(int i = 1; i <= 9; i++){
for(int j = 1; j <= i; j++){
System.out.print(j + "*" + i + "=" + j*i + "\t");
}
System.out.println();
}
}
}
03-while循环语句
-
格式
初始化语句; while(判断条件){ 循环体语句; 条件控制语句; }
-
执行流程 :
1. 执行初始化语句, 在整个循环过程中, 只执行一次 2. 执行判断条件, 看其返回结果是true, false false : 循环结束 true : 进入第三步 3. 执行循环体语句 4. 执行条件控制语句 5. 回到2继续
int i = 1;
while(i <= 10){
System.out.println("HelloWorld");
i++;
}
04-do...while循环 ( 了解 )
-
格式
初始化语句; do { 循环体语句; 条件控制语句; }while(判断条件);
-
执行流程
1. 执行初始化语句 2. 执行循环体语句 3. 执行条件控制语句 4. 执行判断条件, 看其返回结果是true, false false : 循环结束 true : 回到2继续
int i = 1;
do {
System.out.println("HelloWorld");
i++;
}while(i <= 10);
05-三种循环的区别
-
for , while : 先判断, 后执行
-
do...while : 先执行, 后判断
for : 用于控制循环的那个变量, 因为归属于for的语法结构, 在循环结束后, 就会从内存中释放, 不能继续使用了
for(int i = 1; i <= 5; i++){
}
System.out.println(i); // 编译错误
while : 用于控制循环的那个变量, 不归属于while的语法结构, 在循环结束后, 可以继续使用
int i = 1;
while(i <= 10){
System.out.println("HelloWorld");
i++;
}
System.out.println(i); // 可以使用
结论 : 本质来说, for循环和while循环, 没有区别
for能够实现的需求, while都能实现, 反之也是一样
06-跳转控制语句
break : 结束循环, 结束switch
break 只能在循环和switch里面使用
continue : 跳过本次循环, 继续下一次
continue 只能在循环中使用
共同的注意事项 : break, continue 下面不允许写代码, 因为执行不到, 属于无效的代码
细节 : break, continue, 如果遇到了循环嵌套, 默认只能操作, 自己所在的那一层循环
问题 : 能不能控制一下?
回答 : 可以, 需要使用标号
public class LoopDemo2 {
/*
注意: 如果遇到了循环的嵌套, break, continue, 只能操作自己所在的循环
问题: 能不能控制 break, continue, 操作指定的循环呢 ?
回答: 可以, 需要使用标号技术
*/
public static void main(String[] args) {
lo:
for (int i = 1; i <= 5; i++) {
for (int j = 1; j <= 3; j++) {
if (j == 2) {
break lo;
}
System.out.println("程序员");
}
}
}
}
07-Random产生随机数
import java.util.Random;
public class RandomTest {
public static void main(String[] args){
Random r = new Random();
// 产生0~9的随机数
int num1 = r.nextInt(10);
// 产生1~100的随机数
int num2 = r.nextInt(100) + 1;
// 产生20~80的随机似乎
int num3 = r.nextInt(61) + 20;
}
}
实现一个猜数字小游戏
import java.util.Random;
import java.util.Scanner;
public class RandomTest {
/*
需求: 实现猜数字小游戏
1. 产生一个1~100之间的随机数, 作为要猜的数据 randomNumber
2. 键盘录入用户所猜的数据 scNumber
3. 比对
*/
public static void main(String[] args) {
Random r = new Random();
Scanner sc = new Scanner(System.in);
// 1. 产生一个1~100之间的随机数, 作为要猜的数据
int randomNumber = r.nextInt(100) + 1;
while (true) {
System.out.println("请输入:");
// 2. 键盘录入用户所猜的数据
int scNumber = sc.nextInt();
// 3. 比对
if (scNumber > randomNumber) {
System.out.println("猜大了");
} else if (scNumber < randomNumber) {
System.out.println("猜小了");
} else {
System.out.println("恭喜, 猜中了!");
break;
}
}
System.out.println("感谢您的使用, 再见!");
}
}