使用控制流来表达代码的结构
假设现在需要一个程序:
输入大于0的数输出"正数"
小于0的数输出"负数"
等于0则输出0.
那么在Java中怎么来表达这个过程呢,我们就需要用到控制流程语句.
- 条件语句:if-else
- 迭代/循环语句:while,do-while,for
- 中断:return、continue、break
- 多重选择语句:switch
java中不支持goto,但是你可以使用中断语句配合label执行类似的操作.
首先,我们先来看看这个程序的大致流程:
- 编写代码
import java.util.Scanner;
/**
* com.tea.modules.java8.process <br>
* 实现一个简单的控制流程
*
* @author xiejiemin
* @since 2021/4/2
*/
public class SimpleProcessController {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入一个数");
double userEnterNumber = in.nextDouble();
if (userEnterNumber > 0) {
System.out.println("正数");
} else if (userEnterNumber < 0) {
System.out.println("负数");
} else {
System.out.println("0");
}
}
}
Result:
请输入一个数
8
正数
OK,简单地使用if-else来完成上诉程序后.我们开始系统地学习Java中的控制语句.
条件语句
标准的条件语句格式:
if(condition){
// do something
statement
}else if(condition){
// do something
statement
}else{
// do something
statement
}
其中,condition在Java中需要一个结果为boolean的表达式.
else和else-if为可选部分,但是不能单独出现,必须配合if进行使用.
迭代语句
在Java中执行1累加到100,如何实现呢?
其中一个方案就是使用迭代语句来达到这个目的.
while
int i = 1;
int sum = 0;
while (i <= 100) {
sum += i;
i++;
}
System.out.println("1累加到100的结果是:" + sum);
这里的while就是控制循环体的语句了,被
{}
包裹的代码块则是符合while语句的时候会执行的代码块.
下面我们来总结一下while循环的格式.
// condition为true的时候执行statement
while(condition){
statement
}
do-while
do-while可以做到至少执行一次statement,在根据while中的condition决定是否进入下一次循环.
int i = 1;
int sum = 0;
do {
sum += i;
i++;
} while (i <= 100);
System.out.println("1累加到100的结果是:" + sum);
无论i是否小于等于100,都会先进行一次
sum += i;
.
下面我们来总结do-while循环的格式.
do {
statement
} while (condition)
for
for循环的方式是最常用的迭代语句.
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println("1累加到100的结果是:" + sum);
新手入门时,常常会困扰在for循环的执行顺序上,下面我们通过一个图来看看for循环执行的逻辑.
for中断语句: break、continue
continue
现在我们把1累加到100这个问题改造一下,变成:只统计其中的奇数和
,这应该怎么写?
int sum = 0;
for (int i = 1; i <= 100; i++) {
if (i % 2 == 0) {
continue;
}
sum += i;
}
System.out.println("1到100之间的奇数和为:" + sum);
continue的作用就是跳过本次循环的执行,直接跳转到
i++
,然后判断i<=100
,再次进入循环体;
break
我们再修改一下问题: 当遇到77这个数字的时候,跳出整个for循环,然后打印i和结果.
int sum = 0;
int i;
for (i = 1; i <= 100; i++) {
if (i == 77) {
break;
}
sum += i;
}
System.out.println("1累计到76的结果:" + sum + " i:" + i);
执行break后,就直接退出for循环执行打印语句了.
i为77的时候,执行了break,此时i++
并没有执行.
label
Java中不支持goto语句,但是你可以配合label和continue、break来达到类似的效果
这里的例子采用《Java编程思想》中的一个经典例子
int i = 0;
outer: // 此处不允许存在执行语句
for(; true ;) { // 无限循环
inner: // 此处不允许存在执行语句
for(; i < 10; i++) {
System.out.println("i = " + i);
if(i == 2) {
System.out.println("continue");
continue;
}
if(i == 3) {
System.out.println("break");
i++; // 否则 i 永远无法获得自增
// 获得自增
break;
}
if(i == 7) {
System.out.println("continue outer");
i++; // 否则 i 永远无法获得自增
// 获得自增
continue outer;
}
if(i == 8) {
System.out.println("break outer");
break outer;
}
for(int k = 0; k < 5; k++) {
if(k == 3) {
System.out.println("continue inner");
continue inner;
}
}
}
}
- Result
i = 0
continue inner
i = 1
continue inner
i = 2
continue
i = 3
break
i = 4
continue inner
i = 5
continue inner
i = 6
continue inner
i = 7
continue outer
i = 8
break outer
总结一下:
- continue跳回到label中,会执行回到循环体中.
- break跳回到label中,则不会回到循环体中.
多重选择语句: switch
当选择的条件变多时,if-else if
的方式会大大降低可读性.使用switch
语句可以让结构变得清晰一点.
Scanner in = new Scanner(System.in);
System.out.println("请输入当前月份");
int month = in.nextInt();
switch (month){
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;
case 8 :
System.out.println("八月");break;
case 9 :
System.out.println("九月");break;
case 10 :
System.out.println("十月");break;
case 11 :
System.out.println("十一月");break;
case 12 :
System.out.println("十二月");break;
default:
System.out.println("错误的输入");break;
}
这里我们用switch来匹配输入的月份,case则是符合某个数会触发的操作,break则表示跳出整个switch,当无法匹配到case的值时,会进入到default中.
switch支持的输入项
- char、byte、short、int
- Enum
- String
OK,以上就是Java中的控制流程语句了,觉得写的不错,欢迎点赞、转发.
网友评论