1. 流程控制
-
在一个程序中,有很多的代码,代码的执行顺序,就是流程。
-
用于控制代码流程的方式,就是流程控制
-
流程控制的分类:
-
顺序结构:代码从上到下,从右到左依次执行。
-
分支结构:依据一定的条件选择程序执行的路径。
-
循环结构:重复的执行某一段代码的语法结构。
-
2. 分支结构
2.1 if语句
if
语法结构:
if(布尔表达式) {执行代码块;int a = 10;
}
if +CRUD
.....
-
语法解释:
-
布尔表达式:判断条件,如果判断为
true
,则执行大括号内的语句。 -
执行代码块:满足判断条件后所执行的代码语句。
-
-
执行过程
-
判断布尔表达式是否为
true
。 -
为
true
执行代码块。 -
为
false
直接略过。
-
-
if…else
-
语法结构:
-
if(布尔表达式) {执行代码块1; } else {执行代码块2; }
语法解释:
-
布尔表达式:判断条件,如果判断为
true
,则执行大括号内的语句。 -
执行代码块1:满足判断条件后所执行的代码语句。
-
执行代码块2:不满足判断条件后所执行的代码语句。
-
注意事项:
执行代码块1
和执行代码块2
能且仅能执行一块代码。 -
执行过程
-
判断布尔表达式是否为
true
。 -
为
true
执行代码块1。 -
为
false
执行代码块2。
-
-
if…else if…else
-
语法结构:
-
if(布尔表达式1) {执行代码块1; } else if(布尔表达式2) {执行代码块2; } else if(布尔表达式3) {执行代码块3; } else if(布尔表达式……) {执行代码块……; } else if(布尔表达式n) {执行代码块n; } else {执行代码块n+1; }
岳小鹏参加Java考试,他和父亲岳不群达成承诺: 如果: 成绩为100分时,奖励一辆BMW; 成绩为(80,99]时,奖励一台iphone xs max; 当成绩为[60,80]时,奖励一个 iPad; 其它时,什么奖励也没有。 请从键盘输入岳小鹏的期末成绩,并加以判断class IfExam {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入岳小鹏期末成绩:(0-100)");int score = scan.nextInt();if (score == 100) {System.out.println("奖励一辆BMW");//be my wife! BMW <---> MSN} else if (score > 80 && score <= 99) {System.out.println("奖励一台iphone xs max");} else if (score >= 60 && score <= 80) {System.out.println("奖励一个iPad");} else {System.out.println("什么奖励也没有");}} }
-
2.2 switch语句
3. 循环结构
3.1 while循环
-
语法结构:
-
switch(表达式变量) {case 常量1 :执行代码块1;break;case 常量2 :执行代码块2;break;case 常量…… :执行代码块……;break;case 常量n :执行代码块n;break;default:执行代码块n+1; }
-
语法解释:
-
表达式变量:需要判断的值,与各个常量进行匹配。
-
常量:满足的条件。
-
执行代码块:满足条件后,所执行的代码块。
-
-
执行过程
-
表达式变量与常量进行匹配。
-
如果有匹配到,执行对应的代码块内容。
-
遇到
break
就终止代码执行。 -
如果没匹配到,执行
default
下代码块的内容。 -
// 四季交替 class SwitchTest {public static void main(String[] args) {String season = "winter";switch (season) {case "spring":System.out.println("春暖花开");break;case "summer":System.out.println("夏日炎炎");break;case "autumn":System.out.println("秋高气爽");break;case "winter":System.out.println("冬雪皑皑");break;default:System.out.println("季节输入有误");break;}} }
注意事项:如下的两种情况都编译不通过
-
/*boolean isHandsome = true;switch(isHandsome){case true:System.out.println("我好帅啊~~~");break;case false:System.out.println("我好丑啊~~~");break;default:System.out.println("输入有误~~~");}*///情况二/*int age = 10;switch(age){case age > 18:System.out.println("成年了");break;default:System.out.println("未成年");}*/
-
常量类型:(表达式中的6种类型)
-
Jdk1.5之前:
byte
、short
、int
、char
。 -
Jdk1.5:
枚举类型
。 -
Jdk7:
String
。
-
-
常量值不能重复。
-
case
后面只能跟常量,不能跟变量。 -
每个
case
的语句体后面,一定要跟上一个break
语句,否则就无法结束switch
语句,并且发生case
穿透。 -
default
语句:可以写在任意位置,无论写在什么位置,都是最后去匹配;也可以不写,如果不写,就有可能一个语句都执行不到。建议把default
语句加上。
-
-
/* 例题:对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。说明:如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。 */ class SwitchCaseTest1 {public static void main(String[] args) {/*int score = 78;switch(score){case 0:case 1:case 2:...case 100: }*//*int score = 78;if(score >= 60){ }else{ }*/int score = 78;switch(score / 10){case 0:case 1:case 2:case 3:case 4:case 5:System.out.println("不及格");break;case 6:case 7:case 8:case 9:case 10:System.out.println("及格");break;}//更优的解决方案:switch(score / 60){case 0:System.out.println("不及格");break;case 1:System.out.println("及格");break;}} }
2.3 if语句与switch语句的区别
-
相同点:都是进行判断,都可以表达分支结构。
-
不同点:
-
if
更加灵活,出现率较高,switch
出现率较低。 -
switch
的所有语句都可以使用if
进行替代。 -
if
语句更多的是做一些连续性区间值的判断,而switch
语句无法做到。 -
if
语句每次都需要获取表达式的值,而switch
只获取一次表达式的值,所以switch
的效率较高一些。
-
-
定义:重复的执行某一件事。
-
语法结构:
-
初始化变量; while(布尔表达式) {执行代码块;初始化变量的自增; }
-
注意:避免死循环。
-
语法解释:
-
初始化变量:声明一个变量,用于记录循环次数,只执行一次。
-
布尔表达式:进入循环的条件。
-
执行代码块:需要重复执行的代码块。
-
初始化变量的自增
-
-
执行过程:
-
初始化变量。
-
计算布尔表达式,如果为
false
则直接结束循环。 -
为
true
进入循环,执行代码块 -
执行初始化变量的自增。
-
回到第二步
-
class WhileTest {public static void main(String[] args) {//遍历100以内的所有偶数int i = 1;while (i < 100) {if (i % 2 == 0) {System.out.println(i);}i++;}//出了while循环以后,仍可以调用。System.out.println(i);//101} }
3.2 do…while循环
-
语法结构:
-
初始化变量; do {执行代码块;初始化变量的自增; } while(布尔表达式);
-
语法解释:
-
初始化变量:声明一个变量,用于记录循环次数,只执行一次。
-
执行代码块:需要重复执行的代码块。
-
初始化变量的自增
-
布尔表达式:进入循环的条件。
-
-
执行过程:
-
初始化变量。
-
进入循环,执行循环代码块。
-
初始化变量的自增。
-
计算布尔表达式,如果为
false
则直接结束循环。 -
为
true
则回到第二步。
-
public class WhileDemo {public static void main(String[] args) {//遍历100以内的偶数,并计算所有偶数的和及偶数的个数int sum = 0;int total = 0;int i = 0;do {if (i % 2 == 0) {sum += i;total++;}i++;}while (i <= 100);System.out.println("1-100偶数和是:" + sum);System.out.println("1-100偶数个数是:" + total);}
}
3.3 for循环
-
语法结构:
-
for(初始化变量;布尔表达式;初始化变量的自增) {执行代码块; }
-
语法解释:
-
初始化变量:声明一个变量,用于记录循环次数,只执行一次。
-
布尔表达式:进入循环的条件。
-
初始化变量的自增
-
执行代码块:需要重复执行的代码块。
-
-
执行过程:
-
初始化变量。
-
计算布尔表达式,如果为
false
则直接结束循环。 -
为
true
则执行代码块。 -
初始化变量的自增。
-
回到第二步。
-
-
/* 编写程序从1循环到520,并在每行打印一个值, 另外在每个3的倍数行上打印出“I”, 在每个5的倍数行上打印“Miss”, 在每个7的倍数行上打印输出“You”。 */ class ForTest1 {public static void main(String[] args) {for (int i = 1; i <= 520; i++) {System.out.print(i + " ");if (i % 3 == 0) {System.out.print("I");}if (i % 5 == 0) {System.out.print("Miss");}if (i % 7 == 0) {System.out.print("You");}//换行System.out.println();}} }
3.4 三种循环语句的区别
-
do…while
语句和其他两种语句的区别:do…while
语句至少可以执行一次,另外两种有可能一次都执行不了。 -
while
语句和for
的区别: -
代码层面:
while
语句声明的初始化变量,在while
结束之后,还能继续使用;for
中声明的初始化变量,在for
结束之后,就无法使用了。 -
设计层面:
while
语句一般用于描述相对模糊的范围,其他的条件;for
用于描述相对准确,知道循环次数的循环。
3.5 跳转语句
-
跳转语句:在循环的循环体语句中,结束循环,控制循环。
-
continue
语句:结束本次循环,进入下次循环。 -
break
语句:结束当前循环。 -
return
语句:结束当前的方法。
3.6 循环的嵌套
在一次大的循环中,每次的循环内容(循环体)又是一个循环的操作,就需要在大循环中,定义一个小循环。称为循环的嵌套。
/*
嵌套循环的应用1:九九乘法表
1 * 1 = 1
1 * 2 = 2 2 * 2 = 4
。。。
1 * 9 = 9 。。。 9 * 9 = 81*/
class NineNineTable {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 + " = " + (i * j) + " ");}System.out.println();}}
}
4.Scanner类
-
Scanner使用的基本步骤
-
导包
-
实例化
-
接收数据
-
/* 如何从键盘获取不同类型的变量:需要使用Scanner类 具体实现步骤: 1.导包 import java.util.Scanner; 2.Scanner 的实例化:Scanner scanner = new Scanner(System.in); 3.调用Scanner类的相关方法,来获取指定类型的变量 4.需要根据相应的方法,来输入指定类型的值,如果输入的数据类型与要求的数据类型不匹配时, 会报异常:InputMismatchException 导致程序终止。*/
import java.util.Scanner;public class JavaDemo {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入你的姓名:");String name = scanner.next();System.out.println(name);System.out.println("请输入你的年龄:");int age = scanner.nextInt();System.out.println(age);System.out.println("请输入你的体重:");double weight = scanner.nextDouble();System.out.println(weight);System.out.println("你结婚了吗true/false:");boolean isMarried = scanner.nextBoolean();System.out.println(isMarried);System.out.println("请输入你的性别:");String gender = scanner.next();char genderChar = gender.charAt(0);System.out.println(genderChar);System.out.println("输入你的爱好");String hobby = scanner.nextLine();System.out.println(hobby);} }nextLine()方法是读取一整行,以一个回车符作为结束标记停止扫描next() / nextInt() / nextDouble()等方法是,读取到第一个结束符【空格、回车、Tab键】作为结束标记停止扫描
-
5. Debug
-
Debug调试程序:
-
可以让代码逐行执行,查看代码执行的过程,调试程序中出现的bug
-
使用方式:
-
在行号的右边,鼠标左键单击,添加断点(每个方法的第一行,哪里有bug添加到那里)
-
右键,选择Debug执行程序
-
程序就会停留在添加的第一个断点处
-
执行程序
-
f8:逐行执行程序(不进方法)
-
f7:进入到方法中(蓝色==>进入自定义方法)
-
f7:进入到方法中(红色==>进入j ava类库方法和自定义方法 )
-
shift+f8:跳出方法
-
f9:跳到下一个断点,如果没有下一个断点,那么就结束程序
-
F10:回到断点所在位置
-
重新运行
-
下一断点
-
暂停
-
ctrl+f2:退出debug模式,停止程序
-
查看所有断点
-
禁用断点
-
Console:切换到控制台
-