• Java(6)控制流程


    控制流程

    与任何程序设计语言一样,Java使用条件语句和循环结构确定控制流程。
     

    块作用域

    我们首先要了解块(block)的概念。
    块是指由若干条Java语句组成的语句,并用一对大括号括起来。块确定了变量的作用域。一个块可以嵌套在另一个快中。下面就是嵌套在main方法块中的一个块。

    public static void main(String[] args) {
            int n = 1;
            {
                int k = 3;
                System.out.println(k); // success
            }  // k只在这个块中被定义
            System.out.println(k);  // error
        }
    

    但是,不能在嵌套的两个块中声明同名的变量,否则就会有错误,无法通过编译:

    public static void main(String[] args) {
            int n = 1;
            {
                int k = 3;
                int n = 2;
            }
        }
    

    这里已经在外面定义了n,就不能再嵌套的块中再定义n了。
     

    条件语句

    在Java中,条件语句的形式为

    if (condition) statement
    

    这里的条件必须用小括号括起来。剩下的跟其他语言语法几乎一直,直接看以下例子

    import java.util.Scanner;
    
    
    public class SecondSample {
        public static void main(String[] args) {
            /*
            * 根据销售额来评价你的表现,奖励你不同的金额
            * */
            // 创建输入对象
            Scanner in = new Scanner(System.in);
            System.out.println("请输入你的销售额");
            // 在控制台输入你的销售额
            int yourSales = in.nextInt();
            // 定义一个目标
            int target = 1000;
            // 初始化表现
            String performance;
            // 初始化奖金
            int bonus;
            if (yourSales >= 2 * target) {
                performance = "优秀";
                bonus = 1000;
                System.out.printf("你的表现为%s,奖励你%d元%n", performance, bonus);
            } else if (yourSales >= 1.5 * target) {
                performance = "良好";
                bonus = 500;
                System.out.printf("你的表现为%s,奖励你%d元", performance, bonus);
            } else if (yourSales >= target) {
                performance = "及格";
                bonus = 100;
                System.out.printf("你的表现为%s,奖励你%d元", performance, bonus);
            } else {
                System.out.println("You 're fired");
            }
        }
    }
    

    while循环

    当条件为true时,while循环执行下一条语句。一般形式如下:

    while (condition) statement
    

    我们设定一个程序,计算需要多长时间才能够存储一定数量的退休金,假定每年存入相同数量的金额,而且利率是固定的。

    import java.util.Scanner;
    
    public class ThirdSample {
        public static void main(String[] args) {
            /*
            * 计算需要多长时间才能够存储一定数量的退休金
            * */
            Scanner in = new Scanner(System.in);
    
            System.out.println("你需要多少退休金?");
            double goal = in.nextDouble();
    
            System.out.println("你每年将增加多少钱?");
            double payment = in.nextDouble();
    
            System.out.println("利率是多少:");
            double interestRate = in.nextDouble();
    
            double balance = 0;
            int years = 0;
    
            // 未达到目标时更新帐户余额
            while (balance < goal) {
                // 加上今年的付款和利息
                balance += payment;
                double interest = balance * interestRate / 100;
                balance += interest;
                years++;
            }
            System.out.printf("你可以在%d年内退休", years);
        }
    }
    

    while循环是先判断后执行,如果条件不满足则永远是false,那么可能永远不会执行,如果我们想无论条件是否为true,我们都要先执行一条语句,那么在Java中提供了do..while...这种循环形式。

    do statement while (condition)
    

    下面的例子中,首先计算退休账户中的新的余额,然后再询问是否打算退休:

    public class ThirdSample {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
    
            System.out.println("你每年将增加多少钱?");
            double payment = in.nextDouble();
    
            System.out.println("利率是多少?");
            double interestRate = in.nextDouble();
    
            double balance = 0;
            int year = 0;
            String input;
            do {
                balance += payment;
                double interest = balance * interestRate / 100;
                balance += interest;
                year++;
                System.out.printf("%d年后,你的余额为%,.2f%n", year, balance);
                System.out.println("准备退休?(Y/N)");
                input = in.next();
            }
            while (input.equals("N"));
        }
    }
    

    for确定循环

      for循环语句是支持迭代的一种通用结构,由一个计数器或类似的变量控制迭代次数,每次迭代后这个变量将会更新。

    for (int i=1; i<=10; i++){
        System.out.println(i);
    }
    

      for语句的第1部分通常是对计数器初始化;第2部分给出每次新一轮循环执行前要检测的循环条件;第3部分指定如何更新计数器。
    与C++一样,尽管Java允许在for循环的各个部分放置任何表达式,但有一条不成文的规则:for语句的3个部分应该对同一个计数器变量进行初始化、检测和更新。若不遵守这一规则,编写的循环常常晦涩难懂。
     

    注意:在循环中,检测两个浮点数是否相等需要格外小心。for (double x=0;x!=10;x+=0.1),这条语句永远不会结束。由于舍入的误差,永远达不到精确的最终值。因为0.1无法精确地用二进制表示,所以,x将从9.999 999 999 999 98跳到10.099 999 999 999 98。
     

    多重选择:switch语句

    在处理多个选项时,使用if/else语句就显得有些笨拙。Java有一个与C/C++完全一样的switch语句。例如,下面包含4个选项的菜单系统

    public class FifthSample {
        public static void main(String[] args) {
            Scanner in = new Scanner(System.in);
            System.out.println("Select an option (1, 2, 3, 4)");
            int choice =  in.nextInt();
            switch (choice)
            {
                case 1:
                    System.out.println("我选择了1");
                    break;
                case 2:
                    System.out.println("我选择了2");
                    break;
                case 3:
                    System.out.println("我选择了3");
                    break;
                case 4:
                    System.out.println("我选择了4");
                    break;
                default:
                    System.out.println("默认选择");
                    break;
            }
        }
    }
    

    switch语句将从与选项值相匹配的case标签开始执行,直到遇到break语句,或者执行到switch语句的结束处为止。如果没有相匹配的case标签,而有default子句,就执行这个子句。
    注意:强烈不建议使用switch语句,最好永远不要使用,因为如果在case分支语句的末尾没有break语句,那么就会接着执行下一个case分支语句。这种情况跟相当危险,常常会引发错误。
     
    case的标签可以是:

    • 类型为char、byte、short或int常量表达式
    • 枚举常量
    • 从Java7开始,case标签还可以是字符串字面量
  • 相关阅读:
    JavaCV的摄像头实战之一:基础
    JavaCV的摄像头实战之三:保存为mp4文件
    JavaCV的摄像头实战之五:推流
    JavaCV的摄像头实战之二:本地窗口预览
    几行代码把Chrome搞崩溃之:HTML5 MP3录音由ScriptProcessorNode升级成AudioWorkletNode采坑记
    根据经纬度坐标获得省市区县行政区划城市名称,自建数据库 java python php c# .net 均适用
    最新全国省市区县乡镇街道行政区划数据提取(2022年)
    我完成了10000小时开发3D引擎 Wonder
    腾讯云轻量服务器通过Docker搭建外网可访问连接的redis5.x集群
    Maven Helper插件——实现一键Maven依赖冲突问题
  • 原文地址:https://www.cnblogs.com/jiakecong/p/16418793.html
Copyright © 2020-2023  润新知