1、流程控制 

流程控制语句是用来控制程序中各语句执行顺序的语句,包含顺序结构,分支结构,循环结构

1.1 顺序结构

程序从上到下逐行地执行,中间没有任何判断和跳转,程序中大多数的代码都是这样执行的。

java double 比较大小 误差_java double 比较大小 误差

1.2 分支结构

根据不同条件,选择不同的执行路线,最后得到不同的结果。

分支结构包含:单分支结构、双分支结构、多分支结构、switch语句、三元表达式。

场景:

比如登录的时候,我们会输入账号和密码,点击登录,这时候会分两种情况。

当账号密码没有问题,就会进入首页;

当账号密码有问题,就会提示我们账号密码不匹配。

实现这样的效果,就是因为条件不同(两次的账号密码一次是正确的,一次是错误的),执行了不同的代码,最后的效果也不一样。

java double 比较大小 误差_学习_02

1.2.1 if语句(单分支)

// 格式
if(关系表达式) {
	语句体;
}
其他语句;

执行流程:

①首先计算关系表达式的值

②如果关系表达式的值为true就执行语句体

③如果关系表达式的值为false就不执行语句体

④继续执行后面其他语句内容

java double 比较大小 误差_System_03

示例: 

System.out.println("开始");   

int a = 10;
int b = 20; 

// 判断a和b的值是否相等,如果相等,就在控制台输出:a等于b
if(a == b) {
    System.out.println("a等于b");
}     

// 判断a和c的值是否相等,如果相等,就在控制台输出:a等于c
int c = 10;
if(a == c) {
    System.out.println("a等于c");
}       

System.out.println("结束");

1.2.2 if语句(双分支)

// 格式
if (关系表达式) {
    语句体1;   
} else {
    语句体2;   
}

执行流程:

①首先计算关系表达式的值

②如果关系表达式的值为true就执行语句体1

③如果关系表达式的值为false就执行语句体2

④继续执行后面的语句内容

java double 比较大小 误差_学习_04

 示例:

System.out.println("开始");       

int a = 10;
int b = 20;
// 判断a是否大于b,如果是,在控制台输出:a的值大于b,否则,在控制台输出:a的值不大于b
if(a > b) {
    System.out.println("a的值大于b");
} else {
    System.out.println("a的值不大于b");
}       

System.out.println("结束");

1.2.3 if语句(多分支)

// 格式
if (关系表达式1) {
    语句体1;   
} else if (关系表达式2) {
    语句体2;   
} else if (关系表达式3) {
    语句体3;   
} 
…
else {
    语句体n+1;
}

执行流程:

①首先计算关系表达式1的值

②如果值为true就执行语句体1;如果值为false就计算关系表达式2的值

③如果值为true就执行语句体2;如果值为false就计算关系表达式3的值

④如果值为true就执行语句体3;如果值为false就计算关系表达式4的值

⑤...

⑥如果没有任何关系表达式为true,就执行语句体n+1。

java double 比较大小 误差_java_05

示例:

/*  
	需求:输入一个分数
	如果大于等于90,则输出【优秀】
	如果大于等于80,小于90,则输出【良好】
	如果大于等于60,小于80,则输出【及格】
	如果小于60,则输出【不及格】
*/
Scanner scanner = new Scanner(System.in);

double score = scanner.nextDouble();

if(score >= 90) {
    System.out.println("优秀");
} else if(score >= 80) {
    System.out.println("良好");
} else if(score >= 60) {
    System.out.println("及格");
} else {
    System.out.println("不及格");
}

注意事项:

  • 多分支结构可以包含多个else if语句
  • 最后的else不是必须的

1.2.4 switch语句

// 格式
switch (表达式) {
    case 值1:
    {
      	语句体1;
    }
        break;
    case 值2:
        语句体2;
        break;
    ...
    default:
        语句体n+1;
        break;
}

执行流程:

①首先计算出表达式的值。

②其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。

③最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。

 

java double 比较大小 误差_java double 比较大小 误差_06

/*
	键盘录入星期数,显示今天的减肥活动(1~7代表周一到周日)。
	周一:写写博客
	周二:快乐夜跑
	周三:上课学习
	周四:去“疯狂星期四”
	周五:自主学习
	周六:打英雄联盟
	周日:休息一天
*/
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数表示星期");
int week = sc.nextInt();

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;
}

注意:不写break会引发case穿透现象,即运行完当前的case之后没有找到break,程序会继续往下执行直到找到break为止。

1.2.5 三元表达式

// 格式
关系表达式 ? 表达式1 :表达式2

执行流程:

根据关系表达式的结果,如果是true,则返回表达式1的值,如果是false,则返回表达式2的值。

示例:

// 需求:输入一个分数,如果分数是大于等于60,则输出【及格】;如果小于60,则输出【不及格】
Scanner scanner = new Scanner(System.in);

double score = scanner.nextDouble();

System.out.println(score >= 60 ? "及格" : "不及格");

ps:switch比较适合做等值判断;if比较适合做区间判断。

1.3 循环结构

循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复 执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形成死循环。

1.3.1 for循环

for (初始化语句;条件判断语句;条件控制语句) {
    循环体语句;
  	break;//跳出当前循环
    continue;//结束当前次循环,进行下一次
}

执行流程:

①执行初始化语句

②执行条件判断语句,看其结果是true还是false

如果是false,循环结束

如果是true,继续执行

③执行循环体语句

④执行条件控制语句

⑤回到②继续

java double 比较大小 误差_学习_07

// 简单使用
// 打印10个“HelloWorld”
for (int i = 1; i <= 10; i++) {
    System.out.println("HelloWorld");
}

1.3.2 while循环

// 格式
初始化语句;
while(条件判断语句){
    循环体;
    条件控制语句;
}

执行流程:

①初始化语句。

②执行条件判断语句,得到结果。

③如果为false,结束循环。

④如果为true,执行循环体,再执行条件控制语句,继续②。

java double 比较大小 误差_java double 比较大小 误差_08

// 打印10个“HelloWorld”
int i = 1;
while(i <= 10){
    System.out.println("HelloWorld");
    i++;
}
System.out.println(i);

1.3.3 do...while循环

// 格式
初始化语句;
do{
    循环体;
    条件控制语句;
}while(条件判断语句);

执行流程:

①初始化语句。

②执行循环体,再执行条件控制语句。

③执行条件判断语句,得到结果。

④如果为false,结束循环。

⑤如果为true,执行循环体,再执行条件控制语句,继续③。

java double 比较大小 误差_java double 比较大小 误差_09

 示例:

java double 比较大小 误差_java_10

// 我们平常在修改密码的时候,要求必须先输入,然后保存再判断【新密码】和【确认密码】有没有一致。
// 强调先执行,再判断
Scanner scanner = new Scanner(System.in);

String newPassword = ""; // 新密码
String confirmPassword = ""; // 确认密码

do {
    System.out.println("请输入新密码:");
    newPassword = scanner.next();
    System.out.println("请确认新密码:");
    confirmPassword = scanner.next();

    // equals用于比较字符串是否相等,后面会讲
    if(!newPassword.equals(confirmPassword)) {
        System.out.println("两次输入的密码不一致,请重新输入!!");
    }
} while (!newPassword.equals(confirmPassword));

System.out.println("操作成功!!!");

1.3.4 continue和break

        1.continue

作用:结束本次循环,继续下一次循环。

        2break

作用:结束整个循环。

1.3.5 循环总结

  1. for和while循环,是先判断,再执行。
  2. do...while是先执行,再判断。
  3. 当知道循环次数或者循环范围的时候,用for循环。
  4. 当不知道循环次数,也不知道循环范围,但是知道循环的结束条件时,用while循环。