在程序中,程序运行的流程控制决定程序是如何运行的。
主要是一下三大流程控制语句
顺序控制:指程序从上到下顺序执行,中间没有任何判断与跳转。
以下例子就是顺序控制
public class ProcessControl { public static void main (String[] args) { int num1 = 123; int num2 = 456; int reslut = num1 + num2; } }
从上到下每条语句依次执行:
num1
变量并赋值 123
num2
变量并赋值 456
result
并将 num1
加 num2
的和赋给 result
这就是以上代码的执行顺序
分支控制:让程序有选择的执行,分支控制分为三种
基本语法:
/* if (判断条件) { 满足条件后需要执行的语句; 可以有多条语句; 但是每条语句结束后需要加上; // ; } */ // 实际应用代码 public class ProcessControl { public static void main (String[] args) { // 这里作为控制开关 boolean control = true; // 如果 control 为 true 就执行 if 里面的语句,如果为 false 直接跳过改代码快执行后面的语句 // 这里的 control 也可以换成其他条件表达式,如 2 > 3 等等,只要表达式最后的返回值是 boolean 类型就可以 if (control) { System.out.println("执行了第一条语句"); System.out.println("执行了第二条语句"); System.out.println("执行了第三条语句"); System.out.println("执行了第四条语句"); System.out.println("执行了最后一句"); } System.out.println("执行了外面的语句"); } }
运行上面代码,并尝试把 contorl
改为 false
看看和 true
的区别
// 如果满足条件后需要执行的语句只有一条也可以这样写 if (2 < 3) System.out.println("条件满足了"); // 虽然可以这样写但还是建议加上 {} 增强代码阅读性
实际应用:
/* 目标 让用户输入年龄 然后判断年龄, 如果小于 18 岁,打印 未成年人请在家长陪同下观看 然后再播放 如果大于 18 岁,直接播放 */ // 先导入扫描器 Scanner import java.util.Scanner; public class AgeJudge { public static void main (String[] args) { // 创建扫描器对象 Scanner input = new Scanner(System.in); // 提示用户输入 System.out.print("请输入你的年龄:"); // print 不换行 println换行 // 创建变量接收用户输入的信息 byte age = input.nextByte(); // 判断年龄 if (age < 18) { System.out.println("未成年人请在家长陪同下观看"); } // 执行播放 System.out.println("播放......"); } }
双方在就是在单分支的基础上,增加了一条对条件表达式为false
时候的处理分支
基本语法:
if (条件表达式) { // 如果条件表达式为 true执行这个大括号里的代码 需要执行的语句; } else { // 如果条件表达式为 false 执行这个大括号里的代码 需要执行的语句; }
实际应用:
/* 目标 让用户输入年龄 然后判断年龄, 如果小于 18 岁,打印你还年轻 再继续执行后面的程序 如果大于 18 岁,打印你个糟老头子 再继续执行后面的程序 */ // 先导入扫描器 Scanner import java.util.Scanner; public class AgeJudge { public static void main (String[] args) { // 创建扫描器对象 Scanner input = new Scanner(System.in); // 提示用户输入 System.out.print("请输入你的年龄:"); // print 不换行 println换行 // 创建变量接收用户输入的信息 byte age = input.nextByte(); // 判断年龄 if (age < 18) { System.out.println("你还年轻"); } else { System.out.println("你个糟老头子"); } // 继续执行后面的代码 System.out.println("我是后面的代码"); } }
多分支就是在双分支的中间再插入一个判断条件
// 基本语法 if (条件表达式1) {满足该条件后要运行的代码;} // 如果语句较短{}可以不换行 else if (条件表达式2) { 满足该条件后要运行的代码; // 建议使用行尾风格 } else 既不满足条件1,也不满足条件2 的时候要运行的代码; // {} 可以省略,但不建议
实际应用:
/* 目标: 让用户输入年龄 如果 低于 18 岁 输出 你还未成年 再运行后面的代码 如果 等于 18 岁 输出 你已成年 在运行后面的代码 如果 大于 18 岁 输出 你是该糟老头子 再运行后面的代码 */ // 先导入扫描器 Scanner import java.util.Scanner; public class AgeJudge { public static void main (String[] args) { // 创建扫描器对象 Scanner input = new Scanner(System.in); // 提示用户输入 System.out.print("请输入你的年龄:"); // print 不换行 println换行 // 创建变量接收用户输入的信息 byte age = input.nextByte(); // 判断年龄 if (age < 18) { System.out.println("你还未成年"); } else if (age == 18) { System.out.println("你已成年"); } else { System.out.println("你是个糟老头子"); } // 继续执行后面的代码 System.out.println("我是后面的代码"); } }
注意:
分支控制
if (条件判断) {......}
else if (判断条件) {......}
能拥有无数个if
代码块只能拥有0 或 1 个 else {......}
如果加了else
只能放该if
代码块的最后将前面学习到的内容综合应用起来
编写一个简单的收银台
需求:
苹果 价格5元/个
桃子 价格6元/个
梨 价格4元/个
西瓜 价格8元/个
总余额 100 元
求 先打印出总余额 即 商品价格列表
要求用户输入 商品编号
输入购买数量
自动扣除余额并打印购买信息
// 导入Scanner import java.util.Scanner; public class Checkout { public static void main (String[] args) { // 余额 double balance = 100; // 商品价格 int apple_price = 5; int peach_price = 6; int pear_price = 4; int watermelon_price = 8; // 先打印余额及价格信息 System.out.println("欢迎光临,您的余额为:" + balance + "元"); System.out.println("==================================="); // 分割线 // 打印价格标头 System.out.println("编号\t商品\t价格"); // 打印商品价格 System.out.println("1\t" + "苹果\t" + apple_price); System.out.println("2\t" + "桃\t" + peach_price); System.out.println("3\t" + "梨\t" + pear_price); System.out.println("4\t" + "西瓜\t" + watermelon_price); // 创建 Scanner 对象 Scanner input = new Scanner(System.in); // 提示用户输入商品编号 System.out.print("请输入您要购买的商品编号:"); // 记录用户输入的商品编号 int product_num = input.nextInt(); // 先判断用户输入的商品编号是否存在 if (product_num > 0 && product_num <= 4) { // 如果存在执行该代码块的代码 // 提示用户输入购买数量 System.out.print("请输入您要购买的数量:"); // 记录用户购买数量 int buy_count = input.nextInt(); // 用户选择苹果 if (product_num == 1) { // 先计算总花费 double total_cost = buy_count * apple_price; // 先判断余额是否足够支付,如果不够打印取消交易 if (total_cost <= balance) { System.out.println("您买苹果共花费了 " + total_cost + "余额还剩 " + (balance - total_cost) + "元\n交易完成"); } else System.out.println("余额不足,取消交易"); } // 用户选择桃子 else if (product_num == 2) { // 先计算总花费 double total_cost = buy_count * peach_price; // 先判断余额是否足够支付,如果不够打印取消交易 if (total_cost <= balance) { System.out.println("您买桃子共花费了 " + total_cost + "余额还剩 " + (balance - total_cost) + "元\n交易完成"); } else System.out.println("余额不足,取消交易"); } // 用户选择梨 else if (product_num == 3) { // 先计算总花费 double total_cost = buy_count * pear_price; // 先判断余额是否足够支付,如果不够打印取消交易 if (total_cost <= balance) { System.out.println("您买梨共花费了 " + total_cost + "余额还剩 " + (balance - total_cost) + "元\n交易完成"); } else System.out.println("余额不足,取消交易"); } // 用户选择西瓜 else if (product_num == 4) { // 先计算总花费 double total_cost = buy_count * watermelon_price; // 先判断余额是否足够支付,如果不够打印取消交易 if (total_cost <= balance) { System.out.println("您买西瓜共花费了 " + total_cost + "余额还剩 " + (balance - total_cost) + "元\n交易完成"); } else System.out.println("余额不足,取消交易"); } } else{ System.out.println("您输入的商品编号有误,请重新尝试"); } } }
以上案例用到了我们前面学习的 变量、转义字符、字符串拼接、Scanner、分支控制、分支嵌套、逻辑运算符、算术运算符,将我们目前学到的东西套用起来能得到这么一个简陋的收银台。