当你停下脚步
别忘了别人还在奔跑
目录
Java中一共有三大结构,分别是 顺序结构、选择结构、循环结构
- public class Test {
- public static void main(String[] args) {
- int a = 10;
- int b = 20;
- System.out.println(a);
- System.out.println(b);
- }
- }
按照代码的顺序一行一行的执行就是顺序结构
如果代码的顺序发生改变了,那么执行的顺序也会发生对应个改变
选择结构又叫做分支结构,因为选择的不同最后的执行的选择体中的代码也不同。假设小美去买彩票,如果她买的彩票号码与中奖彩票号码一样则小美中奖,否则小美不中奖
选择结构一共有两种语句一个是 if 语句,还有一个是 switch 语句
①单独的 if 语句
- public class Test {
- public static void main(String[] args) {
- int a = 10;
- if(a == 10) {
- System.out.println("中奖");
- }
- System.out.println(a);
- }
- }
打印结果:
如果 if 后面的条件判断语句为真,则执行 if 语句体,也就是打印中奖。如果为假,则不执行 if 语句体。
注:不管执不执行 if 语句体,if 语句体以外的语句都要执行。也就是不管执不执行 if 语句体,都要打印 a 的值
② if...else... 语句
- public class Test {
- public static void main(String[] args) {
- int a = 10;
- if(a == 10) {
- System.out.println("中奖");
- } else {
- System.out.println("没中奖");
- }
- }
- }
执行结果:
如果 if 后面的条件判断语句为真,则执行 if 语句体,否则执行 else 语句体
注:if 语句体 和 else 语句体不会都执行,只会执行其中一个
③ if...else if...else 多层判断选择语句
- public class Test {
- public static void main(String[] args) {
- int a = 10;
- int b = 20;
- if(a == 10) {
- System.out.println("a中奖");
- } else if(b == 20) {
- System.out.println("b中奖");
- } else {
- System.out.println("没中奖");
- }
- }
- }
执行结果:
如果 if 后面的条件判断语句为真,则执行 if 语句体 。否则判断 else if 后面的条件判断语句是否为真,如果为真则执行 else if 语句体,否则执行 else 语句
注:多层判断选择语句也只会执行其中的一个语句体
if 选择语句注意事项
注意1:分号问题
这个代码还是会打印 a中奖,但是这并不是在选择语句体中打印的,造成的原因就是 if 判断语句后面的那个分号。if 后面的条件判断语句为真,则执行 if 后面的一条语句。所有语句被 {} 花括号的括起来称为语句体,被视为一条语句。分号默认是一条语句的结束标志,当 if 后面的条件判断语句为真当准备执行 if 后面的一条语句的时候,发现是分号,也就表示已执行完,其实执行的就是空语句
注意2:悬垂 else 问题
- public class Test {
- public static void main(String[] args) {
- int a = 10;
- int b = 20;
- if (a == 6)
- if(a == 5)
- System.out.println("yes");
- else
- System.out.println("no");
- }
- }
问题:else 与哪个 if 匹配?
答:if / else 语句中可以不加 大括号,也可以写语句(只能写一条语句)。此时 else 是和最接近的 if 匹配
上述代码中最后没有打印结果因为 else 与第二个 if 匹配了。
通过上面两个代码我们就可以充分感受到代码风格以及代码规范的重要性。
注:分号不要随处放,语句体记得加花括号
switch 语句又叫做多分支语句,通常用在多分支里面。当用 if 使用起来比较复杂的时候我们就可以使用多分支。
比如:输入 1~7 之间的某一个数,然后打印对应的星期,如果用 if 来完成就会涉及到多层 else if 相对就比较复杂,这时我们就可以使用 switch 选择语句
- public class Test {
- public static void main(String[] args) {
- int a = 1;
- switch (a) {
- case 1:
- System.out.println("星期一");
- break;
- case 2:
- System.out.println("星期二");
- break;
- case 3:
- System.out.println("星期三");
- break;
- case 4:
- System.out.println("星期四");
- break;
- case 5:
- System.out.println("星期五");
- break;
- case 6:
- System.out.println("星期六");
- break;
- case 7:
- System.out.println("星期天");
- break;
- default:
- System.out.println("超出1~7范围");
- }
-
- }
- }
执行流程
上述代码执行逻辑,首先计算 switch 后面表达式的值,然后拿这个值依次与 case 后面的常量匹配,一旦匹配上就执行该项下的语句,直到遇到break退出,否则一直执行下次。如果一个都没有匹配上则执行 default
注:case后的常量值不可以重复,不要遗忘 break
当条件满足,将一直循环下去的语句就叫做循环语句。假设小美买彩票没中奖,只要小美买彩票没中奖,那么她就会每天买,只要她中奖了则就会停止购买,这就叫做循环
- public class Test {
- public static void main(String[] args) {
- int a = 1;
- while(a <= 10) {
- System.out.printf("%d ",a);
- a++;
- }
- }
- }
执行结果:
上述代码循环语句首先执行 while 后面的判断表达式,如果结果为 true 则执行循环体,然后再判断 while 后面的判断表达式,如果结果为 true 则继续执行循环体,...,直到 while 后面的判断表达式结果为 false 则退出循环
如果上述代码中没有 a++ 则会造成死循环
所以循环一共有三部分,分别是:初识值,结束条件,接近结束条件的变化
break:如果在循环体里面,则直接跳出循环。如果在多分支里面,则跳出多分支
- public class Test {
- public static void main(String[] args) {
- int a = 1;
- while(a <= 10) {
- if(a == 7) {
- break;
- }
- System.out.printf("%d ",a);
- a++;
- }
- }
- }
运行结果:
执行到 break 就会让循环结束
上述代码执行逻辑,先执行 while 后面的判断表达式,如果为 true 则循环体,循环体里面判断选择语句是否为 true ,如果为 true 则直接跳出循环,否则继续往下执行
continue 直接结束本次循环,不会直接跳出循环
- public class Test {
- public static void main(String[] args) {
- int a = 1;
- while(a <= 10) {
- a++;
- if(a == 7) {
- continue;
- }
- System.out.printf("%d ",a);
- }
- }
- }
执行结果:
上述代码执行逻辑,先执行 while 后面的判断表达式,如果为 true 则循环体,循环体里面判断选择语句是否为 true ,如果为 true 则跳出本次循环,继续执行下一次循环
注意:
- public class Test {
- public static void main(String[] args) {
- int a = 1;
- while(a <= 10) {
- if(a == 7) {
- continue;
- }
- a++;
- System.out.printf("%d ",a);
- }
- }
- }
一样的代码,可能顺序不一样最后的结果也就不一样。这个代码就因为 a++ 在选择语句的后面就造成了死循环,当 a == 7 时,跳出本次的循环,也就是本次循环 if 语句以下的语句是不会执行的。那么这次循环并没有执行到 a++,那么 a 的值还是 7,进入循环遇到 if 语句执行 continue,又结束了本次循环但 a 还是 7,因此就造成了死循环
注:代码语句顺序还是很重要滴
语法格式:
表达式①:用于给循环变量设置初始值, 在程序开始时是便会执行,且只会执行一次
表达式②:循环条件的判断,如果判断为 true 则继续执行循环体,否则循环结束
表达式③:循环变量更新方式
for 循环的执行过程:
- public class Test {
- public static void main(String[] args) {
- for (int i = 1; i <= 10;i++) {
- System.out.printf("%d ",i);
- }
- }
- }
执行结果:
do...while循环又叫做直到型循环,它是先执行后判断
语法格式:
先执行循环语句, 再判断循环条件,循环条件为 true 则继续执行,否则循环结束
- public class Test {
- public static void main(String[] args) {
- int i = 1;
- do {
- System.out.printf("%d ",i);
- i++;
- }while (i <= 10);
- }
- }
执行结果:
注:do while 循环最后的分号不要忘记
4.1 输出
- public class Test {
- public static void main(String[] args) {
- int a = 1;
- System.out.println(a);//输出加换行
- System.out.print(a);//输出不换行
- System.out.printf("%d",a);//格式化形式输出
- }
- }
输出结果:
所以最好两个打印打印到一行了。
使用 Scanner 读取字符串/整数/浮点数
在使用 Scannery 之前需要导入 util 包
后面学习了类就自然理解了为什么要导入 util 包了
- import java.util.Scanner;
-
- public class Test {
- public static void main(String[] args) {
- Scanner scanner = new Scanner(System.in);
- int a = scanner.nextInt();
- System.out.println(a);
- }
- }
大家现在只需要记住在使用类之前需要new一个对象,也就是在使用Scanner 之前需要 new 一个Scanner ,然后才能通过 scanner 这个对象去使用