JavaSE 分支结构

来源:互联网 发布:mac忘记开机密码怎么办 编辑:程序博客网 时间:2024/06/05 15:42

分支结构


@Author:云都小生(Cloudkings)


分支结构(if-else if-else)

在编程中,我们经常会碰到这种情况,你想设计一个方案,给自己的程序上锁,只有输入正确密码的时候,才能使用,这个怎么来实现呢?

在没有学习相应的知识之前,我们肯定是写不出来。但是想实现这样一个功能,肯定绕不开一个概念——判断。判断在Java中就是一种分支结构,就像上面说的,两种情况,输入密码正确了,你可以继续接下去的功能,如果密码不正确,就退出。这就是分支结构。

import java.util.Scanner;public class Test{    public static void main(String[] args)    {        Scanner in = new Scanner(System.in);        int pass = 888666;        int enterPass = 0;        System.out.print("请输入密码:");        enterPass = in.nextInt();        if(enterPass == pass)        {            System.out.print("密码正确!");        }    }   }/*    if(表达式——即判断条件)    {        当条件为真的时候,执行的代码···    }*/

从上面的程序中,我们已经了解了if的语法。为了进一步掌握这种语法,所以我们做一个练习,我们顺便来扩展一下这个程序。

现在考虑一下,如果我们的密码包含了abc这些字符(或者特殊字符),一旦密码中包含这些字符,输入就会出错。那怎么解决?

import java.util.Scanner;public class Test{    public static void main(String[] args)    {        Scanner in = new Scanner(System.in);        String pass = "cloudking+";        String enterPass = null;        System.out.print("请输入密码:");        enterPass = in.next();        if(pass.equals(enterPass))        {            System.out.print("密码正确!");        }    }   }

扩展了一个知识点,字符串对比需要用 (str1)equals.(str2) 如果你用 str1 == str2 这种来进行判断,那肯定会出错。因为前者比较的是值,后者比较的是引用。

现在考虑另一种情况,如果密码不正确,你也想给出一个提示,那怎么做?

import java.util.Scanner;public class Test{    public static void main(String[] args)    {        Scanner in = new Scanner(System.in);        String pass = "cloudking+";        String enterPass = null;        System.out.print("请输入密码:");        enterPass = in.next();        if(!pass.equals(enterPass))        {            System.out.println("密码错误!");        }        else        {            System.out.println("密码正确!");        }    }   }if(表达式){    表达式为真时执行的代码···}else //"否则"的意思{    代码···}

else是“否则”的意思。如果输入的密码不等于正确的密码,就显示密码错误,否则!就显示密码正确!

最后再来考虑一种情况,你想要对输入进行判断,如果是100输出”优”,如果是99~90就输出”一般”,90以下都输出差。这个怎么办?这意味着你要进行两次判断呀。

import java.util.Scanner;public class Test{    public static void main(String[] args)    {        Scanner in = new Scanner(System.in);        double score = 0;        System.out.print("请输入成绩");        score = in.nextDouble();        if(score == 100)        {            System.out.print("优");        }        else if(score <= 99 && score >=90)        {            System.out.print("良");        }        else        {            System.out.print("差");        }    }}if(表达式){    表达式为真时执行的代码···}else if(表达式){    表达式为真时执行的代码···}else //"否则"的意思{    代码···}

else if是类似“再如果”的意思,如果第一个if条件没有满足时,就会再进行else if的判断。如果第一个if就已经满足了,那else if就不会判断。允许多个else if出现在一个分支体系中,并且允许分支语法相互嵌套。

    if(表达式)
    {
        表达式为真时执行的代码···
    }
    else if(表达式)
    {
        表达式为真时执行的代码···
    }
    else if(表达式)
    {
        表达式为真时执行的代码···
    }
    else if····
    else //”否则”的意思
    {
        代码···
    }
    /* 相互嵌套 */
    if(表达式)
    {
        if(表达式)
        {
            代码···
    }
    else
    {
            代码···
        }
    }
    if(表达式)
    {
        if(表达式)
        {
            代码···
        }
        else
        {
            代码···
        }
    }
    else
    {
        代码···
    }

主要看你的问题是怎样,根据问题,去决定自己要怎样使用这些语法,需要怎样的分支。

分支结构(switch)

如果每次想进行判断,就需要if或者else一次,会不会很麻烦。如果我需要一次性进行十几种判断,那怎么办?莫慌,Java提供了一种灵活简便的判断语法——switch。

    switch(x)
    {
        case a:代码···
        case b:代码···
        case c:代码···
        case d:代码···
        defualt:代码···
    }

首先,判断switch(开关)后面的那个值,在下面的case(情况)列表中,寻找相同的值,碰到相同的值就会执行它后面的代码,如果一整个case列表都没有找到,就默认执行defualt(默认)后面的代码。

import java.util.Scanner;
public class Test
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        int x = 0;
        System.out.print("请输入数字进行抽奖:");
        x =in.nextInt();
        switch(x)
        {
         case 1:System.out.print("一等奖!");
        case 2:System.out.print("二等奖!");
        case 3:System.out.print("三等奖!");
        defualt:System.out.print("没有奖励!");
        }
     }
}

这个程序看上去没有什么问题,其实是大有问题。当你输入1之后,的确按照你的要求执行了后面的代码。可执行完case 1的代码之后,它还执行了后面各个case以及defualt的代码,这个怎么解决?

很简单!在每个case的代码后, 加上break(中断),一旦执行完某个case的代码后,就立即中断整个switch,直接跳出整个switch。

import java.util.Scanner;public class Test{    public static void main(String[] args)    {           Scanner in = new Scanner(System.in);        int x = 0;        System.out.print("请输入数字进行抽奖:");        x = in.nextInt();        switch(x)        {            case 1:System.out.print("一等奖!");break;            case 2:System.out.print("二等奖!");break;            case 3:System.out.print("三等奖!");break;            defualt:System.out.print("没有奖励!");break;        }    }}

以上,就是Java的两种分支结构的语法。

程序框图

为了了解整个程序的运行逻辑,有时候我们经常会把整个程序的过程,抽象成一个流程图。有些时候,某些问题为了让我们理解,然后用程序去实现,也经常会给出一张抽象的流程图。了解有关程序框图的知识,能让我们更容易理解问题,看清楚程序的运行逻辑。

在流程图中,有这么几种形状,它们都代表不同的意思。
·起止框 圆角方形 程序开始与结束的地方
·输入输出 平行四边形 任何需要输出输入的位置
·赋值、计算 长方形 程序中需要处理数据的地方
·判断 棱形 判断的位置处
各个图形之间是通过箭头连接起来,达成一张完整的程序流程图。

2017/8/28 3:08:24 @Author:云都小生(Cloudking)

原创粉丝点击