目录
1、分支语句
1.1 认识 if 语句
1.2 两个 if 分支以上的情况
1.3 if 嵌套的情况
1.4 switch 语句
1.5 使用 switch 的注意事项
2、循环结构
2.1 while 循环
2.2 for 循环
2.3 do while 循环
2.4 break 和 continue
3、输出到控制台
4、从键盘输入
提到分支语句我们都不陌生,比如我们生活中都要面临着种种选择,而每个选择对应着不同的结果,我们的程序也是有许许多多的分支构成的,在Java中为我们提供了两种分支语句:if 和 switch语句,下面我们就来学习下这两个语句。
这里举一个很简单的双分支语句的例子:张三今天去买彩票,要不中奖了,要不就没有中奖,如果中奖了,那么张三就开心,如果没有中奖张三就不开心,放在程序里面我们怎么表示呢?如果为 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 你也可以结合情况而省略。
当然,在写代码中,我们不可能只碰到两种情况,可能有多种情况需要我们判断,就比如拿学生考试成绩来说,如果在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 使用!
这种情况在我们编程的过程中也难免会碰到, 但是如果有着不良好的代码风格,那可谓是影响代码的可读性,比如:
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 无关。
这个语句使用起来很简单,具体在我们C语言深度解剖专栏有详细介绍,这里的基本语法我们也就不在强调了。
我们来看一段代码:
如上代码我们可以分析出什么呢?
- switch 也是从上到下执行的,表达式的值找到匹配的case入口才进入
- 如果没有 break 语句就会一直往下执行,直到遇到 break
- 当表达式的值,都匹配不上的话,执行 default
这就是为什么之前C语言的时候,也在强调,每个 case 最好带上 break,如果是产品要求,那你可以不带,就好比我们之前写过,1~5输出工作日,6~7输出休息日,那就可以适当的不带上break,具体我们还是要根据实际情况而定。至于 default 这个建议都带上。
注意:在有多个 case 的时候,case 后面的常量值不能重复!
- switch() 括号里面只能是如上红框框类型的表达式。
- switch 的分支很单一,就比如说你要满足一个变量 大于 20 并且 小于 50 才执行某某某,这样用 if 就很方面,而 switch 却做不到,他并不能表达复杂的条件。
- 在case后面,我们的代码要尽可能的简短,不要写的特别复杂。
- 虽然 switch 支持嵌套,但是一般很少这样做,既不美观,又影响代码可读性
我们先简单的通过流程图来认识以下Java中的三种循环结构:
while循环条件 expr 结果必须为 true 或者 fase 也就是布尔值,
for循环条件 expr2 结果也必须是布尔值,
同理,do while循环条件 expr 结果也的是布尔值。所有的循环,一旦碰到循环条件为 false 都会结束循环(do while 最少执行一次循环)
以上则是我们通过流程图得出的结论,下面我们将依次演示每个循环的具体代码实现:
这里我们举一个很简单的例子来看,张三很喜欢买彩票,他每天都买,直到张三买了十年彩票总算中大奖了,然后张三变成了富豪,结束了他每天买彩票的日子,我们简单算一下,就按一年 365 天算,张三一共要买 3650 天的彩票才能中奖,那么我们如何用程序来简单的表示呢?这里就可以用到 while 了:
这个简单的循环程序我们可以发现,当 while 条件表达式不成立了,我们则会跳出循环,而且每次进入循环,我们都会 a自增1,更接近不成立的那个条件,这也叫做循环的迭代条件,如果循环语句中的条件恒成立的话,那将会是个死循环!当然像以上的代码你也可以写个恒成立的表达式,只要达到条件使用 break 跳出即可,berak我们后面会讲,先放着。
for 循环的格式会比 while 循环更直观,如果循环里面代码特别多的话,我们可能很难找到循环更新的表达式,而 for 循环刚好就弥补了这个麻烦,循环更新表达式直接在一行当中:
for ( 表达式1; 布尔表达式2; 表达式3 ) {
//....code
}
在我们的刚开始循环图也能看出来,for循环的执行过程是:1->2->code->3->2->code->3->2->code->3.....
这里我们在写一个很简单的例子来让大家更充分认识 for,求 1~100的和:
这个循环相对于前两个循环使用的频率就会少很多了,看刚开始的图大家也能分析到,此循环最低执行一次,也很好理解,二话不说先执行循环体,在进行条件判断,像类似的,我们在写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后面的分号要写上
至于 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部分表达式需要布尔表达式即可。
在Java中有三种基本输出语法:
System.out.println(mgs); //输出一个字符串,换行
System.out.print(mgs); //输出一个字符串,不换行
System.out.printf(format, msg); //格式化输出,与C语言基本一致
说真的,像这些打印函数几乎以后开发中用不上的,也没必要去给他完全研究透,只要我们会用即可。
这个输入语句,我们只要会用就行目前,因为还没有讲到类,所以理解起来会比较麻烦,现在我们只需要照葫芦画瓢即可,等把类讲完,你自然就懂了我今天的操作。
像平时刷题的时候,如果碰到需要循环输入的话,我们可以在 while() 括号里直接写上我们定义的
scanner.hasNextInt() //一直读取,判断是否有下一个整数,返回值为布尔类型
当循环条件是以上语句的时候,使用 ctrl + z 来结束输入 (Windows 上使用 ctrl + z,Linux / Mac 上使用 ctrl + d),具体为什么这么使用我们后期会介绍,我们目前能会用即可。
下期预告:【Java SE】方法的使用