零基础学Java(6)控制流程

零基础学Java(6)控制流程控制流程与任何程序设计语言一样,Java使用条件语句和循环结构确定控制流程。块作用域我们首先要了解块(block)的概念。块是指由若干条Java语句组成的语句,并用一对大括号括起来。块确定了变

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

控制流程

与任何程序设计语言一样,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标签还可以是字符串字面量

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/165331.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • JAVA枚举类型(Enum)的使用[通俗易懂]

    JAVA枚举类型(Enum)的使用[通俗易懂]在现实社会中,有些类的实例对象是固定的。例如季节,只有春夏秋冬。如果你创建了一个season类,你当然有义务维护这个类的实例对象只能是春(SPRING)、夏(SUMMER)、秋(AUTUMN)、冬(WINTER)这四个。这个时候就体现出枚举类的作用了,java中枚举类型就是针对这样的场景需求所设计的。/***枚举类的后缀建议为Enum,枚举类型的实例对象建议全大写(这样做符合JAVA的…

    2022年10月9日
    0
  • jmeter 中 Client implementation HttpClient4和java区别实践一

    jmeter 中 Client implementation HttpClient4和java区别实践一好吧,最近还是在折腾Jmeter,在一个post请求中,发现啃爹的竟然带有特殊字符:’怎么办,直接将数据写入,如下:然后在实际用post发请求时,jmeter自动给转义了,如下:xxxx=%27qq%27%3A%2720%27&rrr=%7Bqq%27  怎么办???那就加加转义字符试试,与是,加了”\”,“\\”,“\\\”,“\\\\”都…

    2022年7月22日
    8
  • moxa串口服务器5430说明书(moxa多串口卡驱动安装)

    简介*多可让4个RS232串口设备立即联网NPort5400系列的基本功能是把您现有的串口设备联让您可以轻松方便的将串口设备连接到以太网络。不但保证您现有的硬件资源,更保证您未来的网络扩充的可能性。另外,NPort5400系列可以轻松的在串口和以太网络之间进行双向的资料传输,让您可以同时达到集中管理串口设备,和在网络中分散管理主机的目的。简单易用的串口设备联网服务器内建人性化的LCM显示屏,可…

    2022年4月13日
    555
  • Mysql decimal(m,d)的说明

    Mysql decimal(m,d)的说明看了一些博客,觉得很多都是复制的,不如自己亲测一篇:createtabledecimal_test(idintauto_incrementPRIMARYkey,scoredecimal(5,2)–取值范围是-999.99到999.99);–整数的位数必须小于等于m-d,不然报错。小数的位数可以大于d位。多…

    2022年7月17日
    17
  • apache做负载均衡_apache负载均衡配置

    apache做负载均衡_apache负载均衡配置测试都是在本地环境进行的。1、安装Apache服务下载:https://www.apachehaus.com/cgi-bin/download.plx?dli=hBjUYRWeZVjTEt2LOhlTykkVOpkVFd1aVpXQw0UU2、解压解压目录:E:\dev\Apache24。3、配置环境变量把路径【E:\dev\Apache24\bin】追加到环境变量PATH。4、配置Apache用文本编辑器配置文件:E:\dev\Apache24\conf\httpd.c

    2022年9月3日
    7
  • ice最新服务器号码,我的世界手机版ice服务器号是什么 ice服务器被炸另有隐情…

    ice最新服务器号码,我的世界手机版ice服务器号是什么 ice服务器被炸另有隐情…近日,一个名为ICE的《我的世界》服务器被其他玩家恶意毁坏了,里面的建筑变得残破不堪,而服务器的存档也仅仅只有数天前的。要知道,这些建筑是很多玩家用大量的时间制造,想要复原不是那么简单。当玩家们还在寻找炸ICE服务器的凶手时,3月25号下午《我的世界》手机论坛中就有一个玩家发了帖子,说服务器是它炸的,它是《迷你世界》的玩家。这个帖子发出去后,在短时间内评论了达到了上千个,也没有版主去管他,就这样这…

    2022年4月27日
    66

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号