美文网首页Java
[Java]重学Java-控制流程语句

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

作者: AbstractCulture | 来源:发表于2021-04-05 17:38 被阅读0次

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

    假设现在需要一个程序:

    输入大于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中的控制流程语句了,觉得写的不错,欢迎点赞、转发.

    相关文章

      网友评论

        本文标题:[Java]重学Java-控制流程语句

        本文链接:https://www.haomeiwen.com/subject/xfidkltx.html