java的逻辑结构_java基础之五小节带你走进java流程控制—选择结构

【流程控制】

主要内容

1. if单分支选择语句

2. if-else双分支选择语句

3. if-else if 多分支选择语句

4. switch多分支选择语句

5. while循环语句

6. do-while循环语句

7. for循环语句

8. 循环控制语句

9. 多重循环

10. 多重循环中的控制语句

11. 方法定义和调用

12. 方法重载

学习目标

本章学习流程控制语句,流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。控制语句分为三类:顺序、选择和循环。

上一章讲解的数据类型和运算符是编程中的“砖块”,是编程的基础。要想开始正式编程,还需要有“水泥”,把“砖块”粘到一起,最终形成“一座大厦”。这个“水泥”就是本章的控制语句。

“顺序结构”代表“先执行a,再执行b”的逻辑。比如,先找个女朋友,再给女朋友打电话;先订婚,再结婚;

“条件判断结构”代表“如果…,则…”的逻辑。比如,如果女朋友来电,则迅速接电话;如果看到红灯,则停车;

“循环结构”代表“如果…,则重复执行…”的逻辑。比如,如果没打通女朋友电话,则再继续打一次; 如果没找到喜欢的人,则再继续找。

顺序结构即按照书写顺序执行每一条语句,比较简单,不是我们的重点。本章研究的重点是“选择结构”和“循环结构”。

很神奇的是,三种流程控制语句就能表示所有的事情!不信,你可以试试拆分你遇到的各种事情。实际上,任何软件和程序,小到一个练习,大到一个操作系统,本质上都是由“变量、选择语句、循环语句”组成。

这三种基本逻辑结构是相互支撑的,它们共同构成了算法的基本结构,无论怎样复杂的逻辑结构,都可以通过它们来表达。上述两种结构组成的程序可以解决全部的问题,所以任何一种高级语言都具备上述两种结构。

因此,本章是大家真正跨入编程界的“门槛”,是成为“程序猿”的“门票”。

一、选择结构

在还没有知道Java选择结构的时候,我们编写的程序总是从程序入口开始,顺序执行每一条语句直到执行完最后一条语句结束,但是生活中经常需要进行条件判断,根据判断结果决定是否做一件事情,这就需要选择结构。

选择结构用于判断给定的条件,然后根据判断的结果来控制程序的流程。主要的条件判断结构有:if结构和switch结构。而if结构又可以分为if单分支结构、if-else双分支结构、if-else if-else多分支结构。

1.1 if单分支结构

语法结构:

if(布尔表达式){

语句块

}

if语句对布尔表达式进行一次判定,若判定为真,则执行{}中的语句块,否则跳过该语句块。流程图如图所示。

if单选择结构流程图

使用if语句实现掷骰子游戏

public class TestIf1 {

public static void main(String[] args) {

//通过掷三个骰子看看今天的手气如何? int i = (int) (6 * Math.random()) + 1;

int j = (int) (6 * Math.random()) + 1;

int k = (int) (6 * Math.random()) + 1;

int count = i + j + k;

//如果三个骰子之和大于15,则手气不错 if (count > 15) {

System.out.println("今天手气不错");

}

//如果三个骰子之和在10到15之间,则手气一般 if (count >= 10 && count <= 15) {

System.out.println("今天手气很一般");

}

//如果三个骰子之和小于10,则手气不怎么样 if (count < 10) {

System.out.println("今天手气不怎么样");

}

System.out.println("得了" + count + "分");

}

}

1.2 if-else双分支结构

语法结构:

if(布尔表达式){

语句块1

}else{

语句块2

}

当布尔表达式为真时,执行语句块1,否则,执行语句块2。也就是else部分。流程图如图所示。

if-else双选择结构流程图

public class TestIf2 {

public static void main(String[ ] args) {

//随机产生一个[0.0, 4.0)区间的半径,并根据半径求圆的面积和周长 double r = 4 * Math.random();

//Math.pow(r, 2)求半径r的平方 double area = 3.14* r*r;

double circle = 2 * Math.PI * r;

System.out.println("半径为: " + r);

System.out.println("面积为: " + area);

System.out.println("周长为: " + circle);

//如果面积>=周长,则输出"面积大于等于周长",否则,输出周长大于面积 if(area >= circle) {

System.out.println("面积大于等于周长");

} else {

System.out.println("周长大于面积");

}

}

}

条件运算符有时候可用于代替简单的if-else语句。

1.3 if-else if-else多分支结构

语法结构:

if(布尔表达式1) {

语句块1;

} else if(布尔表达式2) {

语句块2;

}……

else if(布尔表达式n){

语句块n;

} else {

语句块n+1;

}

当布尔表达式1为真时,执行语句块1;否则,判断布尔表达式2,当布尔表达式2为真时,执行语句块2;否则,继续判断布尔表达式3······;如果1~n个布尔表达式均判定为假时,则执行语句块n+1,也就是else部分。流程图如图所示。

if-else if-else多分支结构流程图

根据年龄判断人生阶段

public class TestIf3 {

public static void main(String[] args) {

int age = (int) (100 * Math.random());

System.out.print("年龄是" + age + ", 属于");

if (age < 15) {

System.out.println("儿童, 喜欢玩!");

} else if (age < 25) {

System.out.println("青年, 要学习!");

} else if (age < 45) {

System.out.println("中年, 要工作!");

} else if (age < 65) {

System.out.println("中老年, 要补钙!");

} else if (age < 85) {

System.out.println("老年, 多运动!");

} else {

System.out.println("老寿星, 古来稀!");

}

}

}

if-else if-else多分支结构既可以实现区间判断的情况,也适用等值判断的情况。而下面讲解的switch语句仅适用等值判断的情况。

1.4 switch多分支结构

语法结构:

switch (表达式) {

case 值1:

语句序列1;

[break];

case 值2:

语句序列2;

[break];

… … … … …

[default:

默认语句;]

}

switch语句会根据表达式的值从相匹配的case标签处开始执行,一直执行到break语句处或者是switch语句的末尾。如果表达式的值与任一case值不匹配,则进入default语句(如果存在default语句的情况)。

根据表达式值的不同可以执行许多不同的操作。switch语句中case标签在JDK1.5之前必须是整数(long类型除外)或者枚举,不能是字符串,在JDK1.7之后允许使用字符串(String)。

大家要注意,当布尔表达式是等值判断的情况,可以使用if-else if-else多分支结构或者switch结构,如果布尔表达式区间判断的情况,则只能使用if-else if-else多分支结构。

switch多分支结构的流程图如图所示。

switch多分支结构流程图

根据分数给出等级

public class TestSwitch1{

public static void main(String [] args){

//给出分数 int score = (int)(Math.random()*81)+20;

//根据分数,给出等级 char grade;

switch(score/10){

case 10 :

case 9 : grade = 'A'; break;

case 8 : grade = 'B'; break;

case 7 : grade = 'C'; break;

case 6 : grade = 'D'; break;

default : grade = 'E';

}

//输出等级 System.out.println("分数:"+score+",等级:"+grade);

}

}

模拟运算器

import java.util.Scanner;

public class TestSwitch2{

public static void main(String [] args){

Scanner input =new Scanner(System.in);

System.out.println("请录入第一个整数");

int num1=input.nextInt();

System.out.println("请录入运算符");

String oper=input.next();

System.out.println("请录入第二个整数");

int num2=input.nextInt();

switch(oper){

case "+":

System.out.println(num1+oper+num2+"="+(num1+num2)); break;

case "-":

System.out.println(num1+oper+num2+"="+(num1-num2)); break;

case "*":

System.out.println(num1+oper+num2+"="+(num1*num2)); break;

case "/":

System.out.println(num2==0?"除数不能为0":num1+oper+num2

+"="+(num1/num2)); break;

case "%":

System.out.println(num2==0?"除数不能为0":num1+oper+num2

+"="+(num1%num2)); break;

default:

System.out.println("操作符有误");

}

}

}

可以掌握的技术:

1. Math.random()是返回[0,1)之间的随机浮点数,需要[10,15]之间的随机数,如何通过Math.random()获取。

2. 完成课堂上的“掷骰子”游戏。

3. 键盘输入一个圆的半径或者随机生成一个半径,计算出圆的面积、周长。比较面积和周长的数字,并打印出不同的提示。

4. 生成[0,120]随机的年龄,然后根据不同的年龄段输出相应的语句(参考课上代码)

5. 生成[0,100]之间的分数。如果90以上(含90)则输出“A”,如果80-89输出“B”,如果70-79输出“C”,60-69之间“D”,60以下是“E”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值