Java 流程控制

1 选择结构if

1.1 if语句

  在Java中,if语句的具体语法格式如下:

if (条件语句){ 
    执行语句;
    ……
}

  上述格式中,判断条件是一个布尔值,当判断条件为true时,{}中的执行语句才会执行。if语句的执行流程如下图所示。

  接下来通过一段代码,学习一下if语句的具体用法

public class HelloWorld{
    public static void main(String[] args){
        int x = 5;
        if (x < 10){
            x++;
        }
        System.out.println("x="+x);
    }
}

  在上述代码中,定义了一个变量x,其初始值为5。在if语句的判断条件中判断x的值是否小于10,很明显条件成立,{}中的语句会被执行,变量x的值将进行自增。从运行结果可以看出,x的值已由原来的5变成了6。

1.2 if…else语句

  if…else语句是指如果满足某种条件,就进行某种处理,否则就进行另一种处理。例如,要判断一个正整数的奇偶,如果该数字能被2整除则是一个偶数,否则该数字就是一个奇数。if…else语句具体语法格式如下:

if (判断条件){
    执行语句1
    ……
}else{
    执行语句2
    ……
}

  上述格式中,判断条件是一个布尔值。当判断条件为true时,if后面{}中的执行语句1会执行。当判断条件为false时,else后面{}中的执行语句2会执行。if…else语句的执行流程如下图所示。

  接下来通过一段代码,来实现判断奇偶数的程序

public class HelloWorld{
    public static void main(String[] args){
        int num = 19;
        if (num%2 == 0){
            //判断条件成立
            System.out.println("num是一个偶数");
        }else{
            System.out.println("num是一个奇数");
        }
    }
}

  上述代码中,变量num的值为19,模以2的结果为1,不等于0,判断条件不成立。因此会执行else后面{}中的语句,打印“num是一个奇数”。

1.3 if…else if…else语句

  if…else if…else语句用于对多个条件进行判断,进行多种不同的处理。例如,对一个学生的考试成绩进行等级的划分,如果分数大于80分等级为优,否则,如果分数大于70分等级为良,否则,如果分数大于60分等级为中,否则,等级为差。if…else if…else语句具体语法格式如下:

if (判断条件1) {
    执行语句1
} else if (判断条件2) {
    执行语句2
}
...
else if (判断条件n) {
    执行语句n
} else {
    执行语句n+1
}

  上述格式中,判断条件是一个布尔值。当判断条件1为true时,if后面{}中的执行语句1会执行。当判断条件1为false时,会继续执行判断条件2,如果为true则执行语句2,以此类推,如果所有的判断条件都为false,则意味着所有条件均未满足,else后面{}中的执行语句n+1会执行。if…else if…else语句的执行流程如下图所示。

  接下来通过一段代码,来实现对学生考试成绩进行等级划分的程序

public class HelloWorld{
    public static void main(String[] args){
        int grade = 75; //定义学生成绩
        if (grade > 80) {
            //满足条件 grade > 80
            System.out.println("该成绩等级为优");
        }else if (grade > 70){
            //满足条件 grade > 70
            System.out.println("该成绩等级为良");
        }else if (grade > 60){
            //满足条件 grade > 60
            System.out.println("该成绩等级为中");
        }
        else{
            //以上都不满足
            System.out.println("该成绩等级为差");
        }
        
    }
}


  上述代码中,定义了学生成绩grade为75。它不满足第一个判断条件grade>80,会执行第二个判断条件grade>70,条件成立,因此会打印“该成绩的等级为良”。

1.4 选择结构if语句与三元运算转换

  三元运算符,它和if-else语句类似,语法如下:

判断条件 ? 表达式1 : 表达式2

  三元运算符会得到一个结果,通常用于对某个变量进行赋值,当判断条件成立时,运算结果为表达式1的值,否则结果为表达式2的值。例如求两个数x、y中的较大者,如果用if…else语句来实现,具体代码如下:

public class HelloWorld{
    public static void main(String[] args){
        int x = 0;
        int y = 1;
        int max;
        if (x>y){
            max = x;
        }else{
            max =y;
        }
        System.out.println(max);
    }
}

  上面的代码运行之后,变量max的值为1。上述代码可以使用三元运算符代替

int max = x > y ? x : y;

2 循环结构

2.1 循环语句while

  while循环语句和选择结构if语句有些相似,都是根据条件判断来决定是否执行大括号内的执行语句。区别在于,while语句会反复地进行条件判断,只要条件成立,{}内的执行语句就会执行,直到条件不成立,while循环结束。while循环语句的语法结构如下:

while(循环条件){
    执行语句
    ………
}

  在上面的语法结构中,{}中的执行语句被称作循环体,循环体是否执行取决于循环条件。当循环条件为true时,循环体就会执行。循环体执行完毕时会继续判断循环条件,如条件仍为true则会继续执行,直到循环条件为false时,整个循环过程才会结束。
  while循环的执行流程如下图所示。

  接下来通过一段代码,来实现打印1~4之间的自然数

public class HelloWorld{
    public static void main(String[] args){
        int x = 1;    //定义变量x,初始值为1
        while (x <= 4){   //循环条件
            System.out.println("x="+x);  //条件成立,打印x的值
            x++;    //x进行自增
        }
    }
}

  在上述代码中,x初始值为1,在满足循环条件x <= 4的情况下,循环体会重复执行,打印x的值并让x进行自增。因此打印结果中x的值分别为1、2、3、4。
  大家要注意的是,代码x++用于在每次循环时改变变量x的值,从而达到最终改变循环条件的目的。如果没有这行代码,整个循环会进入无限循环的状态,永远不会结束。

2.2 循环语句for

  for循环语句是最常用的循环语句,一般用在循环次数已知的情况下。for循环语句的语法格式如下:

for(初始化表达式; 循环条件; 操作表达式){
    执行语句
    ………
}

  在上面的语法结构中,for关键字后面()中包括了三部分内容:初始化表达式、循环条件和操作表达式,它们之间用“;”分隔,{}中的执行语句为循环体。
  接下来分别用1表示初始化表达式、2表示循环条件、3表示操作表达式、4表示循环体,通过序号来具体分析for循环的执行流程。具体如下:

for(1 ; 2 ; 3){
    4
}
第一步,执行1
第二步,执行2,如果判断结果为true,执行第三步,如果判断结果为false,执行第五步
第三步,执行4
第四步,执行3,然后重复执行第二步
第五步,退出循环

  接下来通过一个案例对自然数1~4进行求和

public class HelloWorld{
    public static void main(String[] args){
        int sum = 0;    //定义变量sum,用于记录累加的和
        for (int i = 1;i <= 4;i++){  //i的值会在1~4之间变化
            sum += i; //实现i值的累加
        }
        System.out.println(sum);
    }
}

  上述代码中,变量i的初始值为1,在判断条件i<=4为true的情况下,会执行循环体sum+=i,执行完毕后,会执行操作表达式i++,i的值变为2,然后继续进行条件判断,开始下一次循环,直到i=5时,条件i<=4为false,结束循环,执行for循环后面的代码,打印“sum=10”。

2.3 循环语句do…while

do…while循环语句和while循环语句功能类似,其语法结构如下:

do {
    执行语句
    ………
} while(循环条件);

  在上面的语法结构中,关键字do后面{}中的执行语句是循环体。do…while循环语句将循环条件放在了循环体的后面。这也就意味着,循环体会无条件执行一次,然后再根据循环条件来决定是否继续执行。
do…while循环的执行流程如下图所示。

  接下来使用do…while循环语句来实现打印1~4之间的自然数

public class HelloWorld{
    public static void main(String[] args){
        int x = 1;  //定义变量x,初始值为1
        do{
            System.out.println("x="+x);  //打印x的值
            x++;  //x的值自增
        } while(x <= 4);   //循环条件
    }
}

2.4 循环嵌套

  嵌套循环是指在一个循环语句的循环体中再定义一个循环语句的语法结构。while、do…while、for循环语句都可以进行嵌套,并且它们之间也可以互相嵌套,如最常见的在for循环中嵌套for循环,格式如下:

for(初始化表达式; 循环条件; 操作表达式) {
    ………
    for(初始化表达式; 循环条件; 操作表达式) {
        执行语句
        ………
    }
    ………
}

接下来通过一个练习,来实现使用“*”打印直角三角形

public class HelloWorld{
    public static void main(String[] args){
        int i,j;    //定义两个循环变量
        for (i=1;i <= 9;i++){   //外层循环
            for (j=1;j <= i;j++){   //内层循环
                System.out.print("*");   //打印*
            }
            System.out.print("\n");   //换行
        }
    }
}

运行结果如下所示


  在上述代码中定义了两层for循环,分别为外层循环和内层循环,外层循环用于控制打印的行数,内层循环用于打印“”,每一行的“”个数逐行增加,最后输出一个直角三角形。

2.5 跳转语句(break、continue)

  跳转语句用于实现循环执行过程中程序流程的跳转,在Java中的跳转语句有break语句和continue语句。
1、break语句
  在switch条件语句和循环语句中都可以使用break语句。当它出现在switch条件语句中时,作用是终止某个case并跳出switch结构。当它出现在循环语句中,作用是跳出循环语句,执行后面的代码。

public class HelloWorld{
    public static void main(String[] args){
        int x = 1;  //定义变量x,初始值为1
        while (x <= 4){    //循环条件
            System.out.println("x="+x);    //条件成立,打印x的值
            if (x == 3){
                break;
            }
            x++;   //x进行自增
        }
    }
}

运行结果


在上述带代码中,通过while循环打印x的值,当x的值为3时使用break语句跳出循环。因此打印结果中并没有出现“x=4”。
2、标记
  当break语句出现在嵌套循环中的内层循环时,它只能跳出内层循环,如果想使用break语句跳出外层循环则需要对外层循环添加标记。如下所示,只能打印4行“*”。

public class HelloWorld{
    public static void main(String[] args){
        int i,j;  //定义两个循环变量
        itcase: for (i=1;i <= 9;i++){
            for (j=1;j <=i;j++){
                if (i > 4){
                    break itcase;
                }
                System.out.print("*");
            }
            System.out.print("\n");
        }
    }
}


3、continue语句
  continue语句用在循环语句中,它的作用是终止本次循环,执行下一次循环。接下来通过一个练习对1~100之内的奇数求和

public class HelloWorld{
    public static void main(String[] args){
        int sum = 0;
        for (int i = 1;i <= 100;i++){
            if (i%2 == 0){   //判定i为偶数
                continue;   //结束本次循环
            }
            sum += i;    //计算累计和
        }
        System.out.println("sum = "+sum);
    }
}


  上述代码中,使用for循环让变量i的值在1100之间循环,在循环过程中,当i的值为偶数时,将执行continue语句结束本次循环,进入下一次循环。当i的值为奇数时,sum和i进行累加,最终得到1100之间所有奇数的和,打印“sum = 2500”。
  在嵌套循环语句中,continue语句后面也可以通过使用标记的方式结束本次外层循环,用法与break语句相似,在此不再举例说明。

3 流程控制语句(switch)

  switch 条件语句也是一种很常用的选择语句,它和if条件语句不同,它只能针对某个表达式的值作出判断,从而决定程序执行哪一段代码。例如,在程序中使用数字1~7来表示星期一到星期天,如果想根据某个输入的数字来输出对应中文格式的星期值,可以通过下面的一段伪代码来描述:

用于表示星期的数字
    如果等于1,则输出星期一
    如果等于2,则输出星期二
    如果等于3,则输出星期三
    如果等于4,则输出星期四
    如果等于5,则输出星期五
    如果等于6,则输出星期六
    如果等于7,则输出星期天

  对于上面一段伪代码的描述,大家可能会立刻想到用刚学过得if…else if…else语句来实现,但是由于判断条件比较多,实现起来代码过长,不便于阅读。Java中提供了一种switch语句来实现这种需求,在switch语句中使用switch关键字来描述一个表达式,使用case关键字来描述和表达式结果比较的目标值,当表达式的值和某个目标值匹配时,会执行对应case下的语句。具体实现代码如下:

switch (表达式){
    case 目标值1:
        执行语句1
        break;
    case 目标值2:
        执行语句2
        break;
    ......
    case 目标值n:
        执行语句n
        break;
    default:
        执行语句n+1
        break;
}

  在上面的格式中,switch语句将表达式的值与每个case中的目标值进行匹配,如果找到了匹配的值,会执行对应case后的语句,如果没找到任何匹配的值,就会执行default后的语句。switch语句中的break关键字将在后面的做具体介绍,此处,我们只需要知道break的作用是跳出switch语句即可。

3.1 选择结构switch练习

  接下来通过一个案例演示根据数字来输出中文格式的星期

public class HelloWorld{
    public static void main(String[] args){
        int week = 5;
        switch (week){
            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;
            default:
                System.out.println("输入的数字不正确...");
                break;

        }
    }
}

运行结果如图所示



  在使用switch语句的过程中,如果多个case条件后面的执行语句是一样的,则该执行语句只需书写一次即可,这是一种简写的方式。例如,要判断一周中的某一天是否为工作日,同样使用数字1~7来表示星期一到星期天,当输入的数字为1、2、3、4、5时就视为工作日,否则就视为休息日。接下来通过一个案例来实现上面描述的情况

public class HelloWorld{
    public static void main(String[] args){
        int week = 2;
        switch (week){
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                System.out.println("工作日");
                break;
            case 6:
            case 7:
                System.out.println("休息日");
                break;
            default:
                System.out.println("输入的数字不正确...");
                break;

        }
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,012评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,628评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,653评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,485评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,574评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,590评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,596评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,340评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,794评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,102评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,276评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,940评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,583评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,201评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,441评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,173评论 2 366
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,136评论 2 352

推荐阅读更多精彩内容

  • 1 顺序语句 语句:使用分号分隔的代码称作为一个语句。 注意:没有写任何代码只是一个分号的时候,也是一条语句,...
    哈哈哎呦喂阅读 380评论 0 0
  • 2.流程化控制 1.顺序结构 2.选择结构 加入其中有一个是true,则执行对应的java序列,然后整个if语句结...
    Joypang阅读 242评论 0 0
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,858评论 0 2
  • 《Java从小白到大牛》纸质版已经上架了!!! 程序设计中的控制语句有三种,即顺序、分支和循环语句。Java程序通...
    tony关东升阅读 446评论 0 1
  • 如果有来生,请让我不留余地再爱他一次。
    巴巴米拉阅读 70评论 0 0