目录
一、引入
【1】流程控制的作用:
流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
【2】控制语句的分类:
控制语句分为三类:顺序、选择和循环。
“顺序结构”代表“先执行a,再执行b”的逻辑。
“条件判断结构”代表“如果…,则…”的逻辑。
“循环结构”代表“如果…,则再继续…”的逻辑。
三种流程控制语句就能表示所有的事情!不信,你可以试试拆分你遇到的各种事情。这三种基本逻辑结构是相互支撑的,它们共同构成了算法的基本结构,无论怎样复杂的逻辑结构,都可以通过它们来表达。所以任何一种高级语言都具备上述两种结构。
本章是大家真正进入编程界的“门票”。
【3】流程控制的流程:
二、分支结构(选择结构)
(一)、if
1.单分支
语法结构:
if(布尔表达式){
语句块
}
if语句对布尔表达式进行一次判定,若判定为真,则执行{}中的语句块,否则跳过该语句块。流程图如图所示:
(1)结构:
if(条件表达式,这个表达式的结果是布尔值:要么是false,要么是true)
如果上面()中的表达式返回结果是true,那么执行{}中代码
如果上面()中的表达式返回结果是false ,那么不执行{}中代码
PS:{}中的代码是否执行,取决于()中表达式的返回结果
(2)if后面的()中的条件,要按照自己需求尽量完善(4){}可以省略不写,但是一旦省略,这个if就只负责后面的一句话,所以我们不建议初学者省略
2.多分支
【1】语法结构:
if(布尔表达式1) {
语句块1;
} else if(布尔表达式2) {
语句块2;
}……
else if(布尔表达式n){
语句块n;
} else {
语句块n+1;
}
【1】else:隐藏了一个条件,跟上面分支条件表达式相反的功能 (详见数轴分析)
【2】多分支:好处:只要满足一个 分支以后,后面的分支就不需要判断了 --》效率高
【3】我们写代码的时候,尽量保证else的存在--》else分支相当于“兜底”“备胎”的作用,别的分支都不走,就会走这个分支了
if(sum>=14){
System.out.println("一等奖");
}else if(sum>=10){//隐藏了sum<14
System.out.println("二等奖");
}else if(sum>=6){//隐藏了sum<10
System.out.println("三等奖");
}else{//隐藏了sum<6
System.out.println("四等奖");
}
3.双分支
直接用三目运算符就可以
语法结构:
if(布尔表达式){
语句块1
}else{
语句块2
}
当布尔表达式为真时,执行语句块1,否则,执行语句块2。也就是else部分。流程图如图所示:
4.随机数
随机数:这个数在生成之前我们不确定这个数是多少,不可知
在java中依靠一个类:Math类帮助我们生成,这个类中有一个方法专门用来生成随机数:
Math.random() -------> [0.0,1.0)
Math.random()*6 ----->[0.0,6.0)
(int)(Math.random()*6) ----->[0,5]
(int)(Math.random()*6) +1 ----->[1,6]
应用到程序中:
int num1 = (int)(Math.random()*6) +1;
int num2 = (int)(Math.random()*6) +1;
int num3 = (int)(Math.random()*6) +1;
练习:[32,98] - [0,66]+32 - (int)(Math.random()*67) + 32
5.分支的嵌套使用
分支结构练习1
练习:
会员购物时,不同积分享受的折扣不同,规则如下:
计算会员购物时获得的折扣,效果如下:
答案
//输入会员积分,输出对应折扣或其它提示
//练习逻辑能力和优化程序的能力
import java.util.Scanner;
public class F1121104{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("请输入会员积分:");
double zhekou = 0.0;
if(sc.hasNextLong()&&sc.hasNextInt()){
int score = sc.nextInt();
if(score>=0){
if(score>=8000){
zhekou = 0.6;
}else if(score>=4000){
zhekou = 0.7;
}else if(score>=2000){
zhekou = 0.8;
}else{
zhekou = 0.9;
zhekou = 0.9;
}
System.out.println("该会员享受的折扣是:"+zhekou);
}else{
System.out.println("您输入的不是正数!");
}
}else{
System.out.println("您输入的数字过大或不是整数!");
}
}
}
- 注意引入java.util
- 定义zhekou一定要至少在和后面输出折扣时一样大的局部
- sc.hasNextInt()在int score = sc.nextInt()之前
- sc.hasNextInt()和sc.hasNextLong()表示如果对应的下式输入的是对应类型的值,这输出true,否则输出false
- Long型包括Int型
分支结构练习2
import java.util.Scanner;
public class F1121105{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.print("请输入性别:");
String sexStr = sc.next();
char sex = sexStr.charAt(0);
System.out.print("请输入年龄:");
int age = sc.nextInt();
if((age>7)||(age>5&&sex=='男')){
System.out.println("你可以搬桌子!");
}else{
System.out.println("你不可以搬桌子!");
}
}
}
注意:
输入字符串是 String sexStr = sc.next();
char sex = sexStr.charAt(0);
(二)、switch
switch多分支结构(多值情况)
语法结构:
switch (表达式) {
case 值1:
语句序列1;
[break];
case 值2:
语句序列2;
[break];
… … … … …
[default:默认语句;]
}
- switch语句会根据表达式的值从相匹配的case标签处开始执行,一直执行到break语句处或者是switch语句的末尾。
- 如果表达式的值与任一case值不匹配,则进入default语句(如果存在default语句的情况)。
- 根据表达式值的不同可以执行许多不同的操作。switch语句中case标签在JDK1.5之前必须是整数(long