今天看啥  ›  专栏  ›  JayminAuthor

[Java]重学Java-控制流程语句

JayminAuthor  · 掘金  ·  · 2021-04-05 17:37
阅读 10

[Java]重学Java-控制流程语句

使用控制流来表达代码的结构

假设现在需要一个程序:

输入大于0的数输出"正数"

小于0的数输出"负数"
等于0则输出0.

那么在Java中怎么来表达这个过程呢,我们就需要用到控制流程语句.

  • 条件语句:if-else
  • 迭代/循环语句:while,do-while,for
  • 中断:return、continue、break
  • 多重选择语句:switch

java中不支持goto,但是你可以使用中断语句配合label执行类似的操作.

首先,我们先来看看这个程序的大致流程:
if-else

  • 编写代码
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
复制代码

总结一下:

  1. continue跳回到label中,会执行回到循环体中.
  2. 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支持的输入项

  1. char、byte、short、int
  2. Enum
  3. String

OK,以上就是Java中的控制流程语句了,觉得写的不错,欢迎点赞、转发.




原文地址:访问原文地址
快照地址: 访问文章快照