![](https://img-blog.csdnimg.cn/b4e6ca8983a34017be11d504193bfa0e.png)
最美的不是下雨天,是曾与你躲过雨的屋檐.
目录
1、分支语句
提到分支语句我们都不陌生,比如我们生活中都要面临着种种选择,而每个选择对应着不同的结果,我们的程序也是有许许多多的分支构成的,在Java中为我们提供了两种分支语句:if 和 switch语句,下面我们就来学习下这两个语句。
1.1 认识 if 语句
这里举一个很简单的双分支语句的例子:张三今天去买彩票,要不中奖了,要不就没有中奖,如果中奖了,那么张三就开心,如果没有中奖张三就不开心,放在程序里面我们怎么表示呢?如果为 ture 真,我们则认为张三中奖,如果为 false 假,我们则认为张三没有中奖,接下来我们来简单实现这个代码:
public class TestDemo {
public static void main(String[] args) {
boolean lottery = true;
if (lottery) {
System.out.println("happy");
} else {
System.out.println("unhappy");
}
}
}
如上就是我们很简单的一个 if 语句,其实这里我们用 boolean 类型变量举例就是想告诉大家,if () 括号里面的表达式结果必须得是布尔值,你不能像 C 语言一样写个 1,或者直接 int a = 1; if (a),这样都是不行了,Java中里面一定得是布尔表达式!当然后面的 else 你也可以结合情况而省略。
1.2 两个 if 分支以上的情况
当然,在写代码中,我们不可能只碰到两种情况,可能有多种情况需要我们判断,就比如拿学生考试成绩来说,如果在80分以上为优秀,60分以上为及格,60分以下就不及格,这样我们应该怎么表示呢?我们先来看下三种情况的语法格式:
if (布尔表达式1) {
//...code1
} else if (布尔表达式2) {
//...code2
} else {
//...code3
}
如果表达式1成立执行 code1,如果不成立我们才执行布尔表达式2,如果布尔表达式2成立我们则执行 code2,如果都不成立则执行 code3
public class TestDemo {
public static void main(String[] args) {
int a = 30;
if (a >= 80) {
System.out.println("优秀");
} else if (a >= 60) {
System.out.println("及格");
} else {
System.out.println("不及格");
}
}
}
当然,在这里,你仍然可以结合情况省略最后的 else,虽然 if 可以不需要else,但是 else 绝对不能单独出现,else 必须配合 if 使用!
1.3 if 嵌套的情况
这种情况在我们编程的过程中也难免会碰到, 但是如果有着不良好的代码风格,那可谓是影响代码的可读性,比如:
public class TestDemo {
public static void main(String[] args) {
int a = 10;
int b = 20;
if (a > 0)
if (b > 0)
System.out.println("happy");
else
System.out.println("unhappy");
}
}
这也就是我们常形容的悬空 else,从表面来看,第一时间反应 else 是跟 第一个 if 匹配,但事实不是这样的,在学习C语言应该就学过,else 跟最近的 if 匹配,那么如何才能写出 Java 中良好风格的代码呢?
public class TestDemo {
public static void main(String[] args) {
int a = 10;
int b = 20;
if (a > 0) {
if (b > 0) {
System.out.println("happy");
} else {
System.out.println("unhappy");
}
}
}
}
在实际开发中,我们更建议这样写,最好都加上大括号,不要特立独行,好的代码不是说让别人看不懂,而是让别人看的舒服,看得懂,性能好这才叫做好代码,你代码写的乱七八糟只有你自己看得懂,那八成公司不会留你。
注意:if 表达式后面不要跟分号,这样会导致分号是 if 语句的语句体,而 { } 中的代码已经和 if 无关。
1.4 switch 语句
这个语句使用起来很简单,具体在我们C语言深度解剖专栏有详细介绍,这里的基本语法我们也就不在强调了。
我们来看一段代码:
如上代码我们可以分析出什么呢?
- switch 也是从上到下执行的,表达式的值找到匹配的case入口才进入
- 如果没有 break 语句就会一直往下执行,直到遇到 break
- 当表达式的值,都匹配不上的话,执行 default
这就是为什么之前C语言的时候,也在强调,每个 case 最好带上 break,如果是产品要求,那你可以不带,就好比我们之前写过,1~5输出工作日,6~7输出休息日,那就可以适当的不带上break,具体我们还是要根据实际情况而定。至于 default 这个建议都带上。
1.5 使用 switch 的注意事项
注意:在有多个 case 的时候,case 后面的常量值不能重复!
- switch() 括号里面只能是如上红框框类型的表达式。
- switch 的分支很单一,就比如说你要满足一个变量 大于 20 并且 小于 50 才执行某某某,这样用 if 就很方面,而 switch 却做不到,他并不能表达复杂的条件。
- 在case后面,我们的代码要尽可能的简短,不要写的特别复杂。
- 虽然 switch 支持嵌套,但是一般很少这样做,既不美观,又影响代码可读性
2、循环结构
我们先简单的通过流程图来认识以下Java中的三种循环结构:
- while 循环,如果碰到 break 则跳出循环,如果碰到 continue 结束本次循环回到循环条件判断部分。
- for 循环,如果碰到 break 则跳出循环,如果碰到 continue 则结束本次循环,跳到表达式3,并不会回到循环条件判断表达式2。
- do while 循环,如果碰到break,则跳出循环,如果碰到 continue 则结束本次循环回到循环条件判断部分。
while循环条件 expr 结果必须为 true 或者 fase 也就是布尔值,
for循环条件 expr2 结果也必须是布尔值,
同理,do while循环条件 expr 结果也的是布尔值。所有的循环,一旦碰到循环条件为 false 都会结束循环(do while 最少执行一次循环)
以上则是我们通过流程图得出的结论,下面我们将依次演示每个循环的具体代码实现:
2.1 while 循环
这里我们举一个很简单的例子来看,张三很喜欢买彩票,他每天都买,直到张三买了十年彩票总算中大奖了,然后张三变成了富豪,结束了他每天买彩票的日子,我们简单算一下,就按一年 365 天算,张三一共要买 3650 天的彩票才能中奖,那么我们如何用程序来简单的表示呢?这里就可以用到 while 了:
这个简单的循环程序我们可以发现,当 while 条件表达式不成立了,我们则会跳出循环,而且每次进入循环,我们都会 a自增1,更接近不成立的那个条件,这也叫做循环的迭代条件,如果循环语句中的条件恒成立的话,那将会是个死循环!当然像以上的代码你也可以写个恒成立的表达式,只要达到条件使用 break 跳出即可,berak我们后面会讲,先放着。
2.2 for 循环
for 循环的格式会比 while 循环更直观,如果循环里面代码特别多的话,我们可能很难找到循环更新的表达式,而 for 循环刚好就弥补了这个麻烦,循环更新表达式直接在一行当中:
for ( 表达式1; 布尔表达式2; 表达式3 ) {
//....code
}
- 表达式1:用来设置循环变量的初始值
- 表达式2:循环条件,用来判断是否为真假,条件为假则跳出循环
- 表达式3:循环变量的更新方式
在我们的刚开始循环图也能看出来,for循环的执行过程是:1->2->code->3->2->code->3->2->code->3.....
这里我们在写一个很简单的例子来让大家更充分认识 for,求 1~100的和:
2.3 do while 循环
这个循环相对于前两个循环使用的频率就会少很多了,看刚开始的图大家也能分析到,此循环最低执行一次,也很好理解,二话不说先执行循环体,在进行条件判断,像类似的,我们在写C语言三子棋的时候用到过,一进来先打印菜单让你进行选择。这里我们也写一个简单的例子让大家看一下 do while 循环的语法,比如打印 1~10 的数字:
public class TestDemo {
public static void main(String[] args) {
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 10);
}
}
注意:while后面的分号要写上
2.4 break 和 continue
- break 的功能是跳出循环,如果是嵌套循环则是跳出最近的循环
- continue 的功能是跳过本次循环,进入下次循环。
至于 break 和 continue 他们执行后分别跳到了哪个地方,再这一节刚开始的那个流程图已经画的非常清楚了,大家可以去看一下,接着我们就来简单的实现下最开始讲的张三中彩票使用 break 的写法:
public class TestDemo {
public static void main(String[] args) {
int a = 1;
while (true) {
if (3650 == a) {
System.out.println("第" + a + "天,中奖了!");
break;
}
System.out.println("第" + a + "天,没中奖!");
a++;
}
}
}
至于 continue 概念已经很清楚了,感兴趣的可以自己下去摸索,学习一定得自己尝试,每期我可能都会留一个很简单的让你们去实践得出真理,如果不想实践可以移步至--->
【C语言】关键字的深入理解(第四期)_程序猿教你打篮球的博客-CSDN博客
如上C语言文章很详细的介绍了 continue,因为 Java 在这里跟C与语言区别不是很大,只要记住,Java部分表达式需要布尔表达式即可。
3、输出到控制台
在Java中有三种基本输出语法:
System.out.println(mgs); //输出一个字符串,换行
System.out.print(mgs); //输出一个字符串,不换行
System.out.printf(format, msg); //格式化输出,与C语言基本一致
演示:
说真的,像这些打印函数几乎以后开发中用不上的,也没必要去给他完全研究透,只要我们会用即可。
4、从键盘输入
这个输入语句,我们只要会用就行目前,因为还没有讲到类,所以理解起来会比较麻烦,现在我们只需要照葫芦画瓢即可,等把类讲完,你自然就懂了我今天的操作。
例如,我今天要输入姓名,年龄,然后把他们打印出来:
像平时刷题的时候,如果碰到需要循环输入的话,我们可以在 while() 括号里直接写上我们定义的
scanner.hasNextInt() //一直读取,判断是否有下一个整数,返回值为布尔类型
当循环条件是以上语句的时候,使用 ctrl + z 来结束输入 (Windows 上使用 ctrl + z,Linux / Mac 上使用 ctrl + d),具体为什么这么使用我们后期会介绍,我们目前能会用即可。
下期预告:【Java SE】方法的使用