2.4流程控制

    科技2022-08-17  97

    执行结构

    概述

    1996 年,计算机科学家 Bohm 和 Jacopini 证明了:任何简单或复杂的算法都可以由顺序结构、分支结构和循环结构这三种基本 结构组合而成。

    它们的共同点是都包含一个入口和一个出口,它们的每个代码都有机会被执行,不会出现死循环。

    顺序结构

    顺序结构是一种基本的控制结构,它按照语句出现的顺序执行操作

    分支结构

    分支结构又被称为选择结构,根据条件成立与否来执行操作,

    循环结构

    循环结构是一种重复结构,如果条件成立,它会重复执行某一循环体,直到出现不满足的条件为止。

    分支结构

    一、if 条件语句 if 条件结构是根据条件判断之后再做处理 if(条件语句){…} if (条件语句){…}else{…} if (条件语句){…}else if(条件语句){…} if (条件语句){…}else if(条件语句){…}else{…}

    二、switch 语句、 switch(表达式){ case 取值 1: 语句块 1;break; case 取值 n: 语句块 n;break; default: 语句块 n+1;break; }

    switch 语句有关规则 表达式的返回值必须是下述几种类型之一:int, byte, char, short,String; case 子句中的取值必须是常量,且所有 case 子句中的取值应是不同的; default 子句是可选的; break 语句用来在执行完一个 case 分支后使程序跳出 switch 语句块;如果 case 后面没有写 break 则直接往下面执行! Case 后面的执行体可写{

    循环语句

    一、简介 循环语句功能 在循环条件满足的情况下,反复执行特定代码 循环语句分类 for 循环 while 循环 do/while 循环 二、while 循环 符合条件,循环继续执行;否则,循环退出 特点:先判断,再执行

    while(条件表达式){ //语句块; }

    三、do-while 循环 执行一遍循环操作,符合条件,循环继续执行;否则,循环退出 特点:先执行,再判断

    do { 循环操作 }while ( 条件表达式 );

    四、for 循环

    语法: for(初始化参数;判断条件 ;更新循环变量){ 循环体; }

    例题:

    本次任务一起来解决出租车计费问题。某市出租车计费标准如下图所示, 请根据此标准完成一个出租车计费模拟功能,能够计算总费用和列出产生费用 项目详细情况说明,帮助出租车师傅和乘客了解计费标准。

    结合上述表格,可以得出:总车费=里程费用+低速行驶费(或者等候费) +预约叫车服务费+空驶费+夜间收费+燃油附加费。需要收集的数据有:里程数、 低速行驶时长(早晚高峰期行驶时长和其他时间段行驶时长)、是否预约叫车 (按四小时为标准)、开始乘坐出租车时间、出租车到达终点站时间,结合这 些数据和表中提供的标准就可以使用程序进行计算总车费了。

    package com.atkaikeba; import java.util.Scanner; public class Taxi { public static void main(String[] args) { Scanner input = new Scanner(System.in); //定义变量存储各车费,总车费,总里程 //总车费 int cash = 0; //里程费 double kmCash = 0; //低速费 double lowSpeedCash = 0; //预约费 int appointmentCash = 0; //空驶费 double lingerCash = 0; //夜间费 double nightCash = 0; //燃油费 int oil = 1; //里程 double km; System.out.print("请输入总里程(km):"); if(input.hasNextDouble()) { km = input.nextDouble();//接收 }else { //输入有误,结束进程 System.out.println("输入有误"); return; } //接收上车时间和下车时间 //上车 int onHh; int onMm; int onSs; //下车 int offHh; int offMm; int offSs; //上车 System.out.println("请输入上车时间(时:分:秒):"); //时 System.out.print("时:"); if(input.hasNextInt()) { onHh = input.nextInt();//接收 if(onHh<0 | onHh>23) { //输入有误,结束进程 System.out.println("输入有误"); return; } }else { //输入有误,结束进程 System.out.println("输入有误"); return; } //分 System.out.print("分:"); if(input.hasNextInt()) { onMm = input.nextInt();//接收 if(onMm<0 | onMm>59) { //输入有误,结束进程 System.out.println("输入有误"); return; } }else { //输入有误,结束进程 System.out.println("输入有误"); return; } //秒 System.out.print("秒:"); if(input.hasNextInt()) { onSs = input.nextInt();//接收 if(onSs<0 | onSs>59) { //输入有误,结束进程 System.out.println("输入有误"); return; } }else { //输入有误,结束进程 System.out.println("输入有误"); return; } //下车 System.out.println("请输入下车时间(时:分:秒):"); //时 System.out.print("时:"); if(input.hasNextInt()) { offHh = input.nextInt();//接收 if(offHh<0 | offHh>23) { //输入有误,结束进程 System.out.println("输入有误"); return; } }else { //输入有误,结束进程 System.out.println("输入有误"); return; } //分 System.out.print("分:"); if(input.hasNextInt()) { offMm = input.nextInt();//接收 if(offMm<0 | offMm>59) { //输入有误,结束进程 System.out.println("输入有误"); return; } }else { //输入有误,结束进程 System.out.println("输入有误"); return; } //秒 System.out.print("秒:"); if(input.hasNextInt()) { offSs = input.nextInt();//接收 if(offSs<0 | offSs>59) { //输入有误,结束进程 System.out.println("输入有误"); return; } }else { //输入有误,结束进程 System.out.println("输入有误"); return; } //是否预约叫车,接收“是”或“否” Boolean appointment; //是否提前4小时预约 Boolean exceed = null; //判断 System.out.println("是否预约叫车(回答“true”或“false”):"); if(input.hasNextBoolean()) { appointment = input.nextBoolean();//接收 if(appointment) { //是否提前4小时预约 System.out.println("是否提前4小时预约(回答“true”或“false”):"); if(input.hasNextBoolean()) { exceed = input.nextBoolean();//接收 }else { //输入有误,结束进程 System.out.println("输入有误"); return; } } }else { //输入有误,结束进程 System.out.println("输入有误"); return; } //是否低速行驶,接收“是”或“否”,若为“是”,则接收早晚高峰低速行驶时长及非高峰时长(分钟) Boolean lowSpeed; //高峰 int peakDuration = 0; //非高峰 int offPeakDuration = 0; System.out.println("是否有低速行驶(回答“true”或“false”):"); if(input.hasNextBoolean()) { lowSpeed = input.nextBoolean();//接收 if(lowSpeed) { System.out.println("请输入早晚高峰期低速行驶时长(分钟):"); if(input.hasNextInt()) { peakDuration = input.nextInt();//接收 } System.out.println("请输入非高峰期低速行驶时长(分钟):"); if(input.hasNextInt()) { offPeakDuration = input.nextInt();//接收 } } }else { //输入有误,结束进程 System.out.println("输入有误"); return; } //是否往返载客 Boolean linger = null; if(km >= 15) { System.out.println("是否往返载客(回答“true”或“false”):"); if(input.hasNextBoolean()) { linger = input.nextBoolean();//接收 }else { //输入有误,结束进程 System.out.println("输入有误"); return; } } //计算总金额 //里程费 if(km < 3) { kmCash = 13; }else if(km >= 15){ //基本单价 kmCash = km*2.3; //空驶费 if(linger) {}else { lingerCash = kmCash*1.5; } }else { //基本单价 kmCash = km * 2.3; } //预约费 if(appointment) { if(exceed) { //4小时 appointmentCash = 6; }else { //非4小时 appointmentCash = 5; } } //低速行驶费 if(lowSpeed) { lowSpeedCash = (peakDuration/5)*2*2.3 + (offPeakDuration/5)*1*2.3; } //夜间费 if(onHh == 23 | onHh < 5 | offHh == 23 | offHh < 5) { nightCash = 1.2*kmCash; } //四舍五入 int kc = (int)(kmCash*10+5)/10;//里程 int lsc = (int)(lowSpeedCash*10+5)/10;//低速 int lc = (int)(lingerCash*10+5)/10;//往返开车 int nc = (int)(nightCash*10+5)/10;//夜间 //总和 cash = kc + lsc + appointmentCash + lc + nc + oil; //打印账单 //输入的内容 System.out.println("--------------------"); System.out.println("总里程(km):" + km); System.out.println("上车时间(hh:mm:ss):" + onHh + ":" + onMm + ":" + onSs); System.out.println("下车时间(hh:mm:ss):" + offHh + ":" + offMm + ":" + offSs); //预约叫车 if(appointment) { System.out.println("预约叫车:是"); if(exceed) { System.out.println(" 提前4小时预约:是"); }else { System.out.println(" 提前4小时预约:否"); } }else { System.out.println("预约叫车:否"); } //低速 if(lowSpeed) { System.out.println("低速行驶:是"); System.out.println(" 早晚高峰期低速行驶时长(分钟):" + peakDuration); System.out.println(" 非高峰期低速行驶时长(分钟):" + offPeakDuration); }else { System.out.println("低速行驶:否"); } //往返开车 if(linger == null) {}else { if(linger) { System.out.println("往返载客:是"); }else { System.out.println("往返载客:否"); } } //费用详情 System.out.println("--------------------"); //总 System.out.println("总车费为:" + cash +"元"); //详情 System.out.println(" 其中:"); System.out.println("里程费用:" + kc +"元"); //低速 if(lowSpeed) { System.out.println("低速行驶费:" + lsc +"元"); } //预约 if(appointment) { System.out.println("预约叫车服务费:" + appointmentCash +"元"); } //往返 if(linger == null) {}else { if(linger) {}else { System.out.println("空驶费:" + lc +"元"); } } //夜间 if(onHh == 23 | onHh < 5 | offHh == 23 | offHh < 5) { System.out.println("夜间收费:" + nc +"元"); } System.out.println("燃油附加费:" + oil); } }

    人工智能的概念刚兴起时,网上流传了一段价值一个亿的代码 1、计算应缴金额 商场根据会员积分打折: 2000 分以内打 9 折, 4000 分以内打 8 折, 8000 分以内打 7.5 折, 8000 分以上打 7 折,使用 if-else-if 结构,实现手动输入购物金额和积分, 计算出应缴金额

    import java.util.Scanner; /*商场根据会员积分打折: 2000 分以内打 9 折, 4000 分以内打 8 折, 8000 分以内打 7.5 折, 8000 分以上打 7 折,使用 if-else-if 结构, 实现手动输入购物金额和积分, 计算出应缴金额*/ public class Demo1 { public static void main(String[] args) { //控制台输入 Scanner input = new Scanner(System.in); //提示用户输入金额 System.out.println("请输入购物金额:"); //接收用户输入的金额 double money = input.nextDouble(); //提示用户输入积分 System.out.println("请输入购物积分:"); //接受用户输入的积分 int point = input.nextInt(); //判断各种情况 if(point<2000){ money *= 0.9; //money = money*0.9 }else if(2000<=point&&point<4000){ money *= 0.8; }else if(4000<=point&&point<8000){ money *= 0.75; }else{ money *= 0.7; } System.out.println("您的应付金额为:"+money); } }

    2、计算该年该月天数 一年中有 12 个月,而每个月的天数是不一样的。其中大月 31 天,分别为 1,3,5,7,8,10,12 月,小月 30 天,分别 为 4,6,9,11 月。还有二月比较特殊,平 年的二月只有 28 天,而闰年的二月有 29 天,由用户在控制台输入年份和月份, 程序计算该年该月的天数。

    public class Demo2 { public static void main(String[] args) { Scanner input = new Scanner(System.in); //输入 System.out.println("请输入年份:"); int year = input.nextInt(); //接收控制台输入的年份 System.out.println("请输入月份:"); int month = input.nextInt(); //接收控制台输入的月份 switch (month){ //1,3,5,7,8,10,12都是31天 case 1: case 3: case 5: case 7: case 8: case 10: case 12: System.out.println(year+"年"+month+"月有31天"); break; //4,6,9,11都是30天 case 4: case 6: case 9: case 11: System.out.println(year+"年"+month+"月有30天"); break; case 2: //判断闰年 if(year%4==0&&year%100!=0||year%400==0){ System.out.println(year+"年2月有29天"); }else { System.out.println(year+"年2月有28天"); } break; } } }

    3、图形打印任务 在控制台中,编写三个 Demo,分别输出如下图形:

    public class Demo01 { public static void main(String[] args) { //i:j = 1:1 for(int i=0;i<5;i++) { for(int j=0;j<=i;j++) { System.out.print("*"); } System.out.println(); } }

    }

    Processed: 0.023, SQL: 9