本章及以后讲解流程控制的内容。
逐步进入代码的编写,以解决一些实际问题。
一、概述
流程控制语句分三类:顺序、选择、循环。
1.顺序的流程控制语句:
从上到下依次执行
2.选择的流程控制语句:
主要是if-else结构和switch结构两类。其中,if-else结构可以演变出多重if结构、嵌套if结构。
- if 结构、if-else结构
- 多重if结构
- 嵌套if结构
- switch结构
3.循环的流程控制语句:
- while, do-while, for
- 循环嵌套
二、多重if else结构
2.1 之前的简单结构
- if 结构:
- if-else结构
2.2 多重if else结构
有点像Python中的elif
~
2.3 案例应用
需求描述:
编写一个程序,根据考试成绩,输出相应的评定信息:
- 成绩大于等于90分,输出“优”;
- 成绩大于等于80,且小于90分,输出“良”;
- 成绩大于等于60分,且小于80分,输出“中”;
- 成绩小于60分,输出“不及格”。
1.使用之前的if else结构
package com.imooc.flow;
import java.util.Scanner;
public class ScoreAssess {
public static void main(String[] args) {
// 多行注释
/*
- 成绩大于等于90分,输出“优”;
- 成绩大于等于80,且小于90分,输出“良”;
- 成绩大于等于60分,且小于80分,输出“中”;
- 成绩小于60分,输出“不及格”。
*/
System.out.println("请输入成绩:");
Scanner sc=new Scanner(System.in);
int score=sc.nextInt();
if(score>=90) // 这里结尾没有分号!因为分号表示一段语句的结束~
System.out.println("优");
if(score>=80 & score<90)
System.out.println("良");
if(score>=60 & score<80)
System.out.println("中");
if(score<60)
System.out.println("不及格");
}
}
--->
请输入成绩:
90
优
2.使用多重if else结构:
package com.imooc.flow;
import java.util.Scanner;
public class ScoreAssess {
public static void main(String[] args) {
// 多行注释
/*
- 成绩大于等于90分,输出“优”;
- 成绩大于等于80,且小于90分,输出“良”;
- 成绩大于等于60分,且小于80分,输出“中”;
- 成绩小于60分,输出“不及格”。
*/
System.out.println("请输入成绩:");
Scanner sc=new Scanner(System.in);
int score=sc.nextInt();
if(score>=90)
System.out.println("优");
else if(score>=80) // 相当于score>=80 & score<90,隐含条件
System.out.println("良");
else if(score>=60) // 相当于score>=60 & score<80
System.out.println("中");
else // 相当于score<60
System.out.println("不及格");
}
}
--->
请输入成绩:
55
不及格
三、嵌套if else结构
将整个if块,插入到另一个if块中
3.1 语法格式
3.2 案例应用
从键盘输入两个整数,经过判断,输出他们的关系(大于、小于、等于)?
- 使用嵌套if else结构
package com.imooc.flow;
public class IntCompare {
public static void main(String[] args) {
// 定义两个整型变量,并初始化
int x=5,y=10;
// 判断x和y是否相等
if(x!=y) {
if(x>y) { // 嵌套了一个if else结构
System.out.println(x+"大于"+y);
}
else {
System.out.println(x+"小于"+y);
}
}
else // 隐含条件:x=y
{
System.out.println(x+"和"+y+"相等");
}
}
}
--->
5小于10
注意:先将代码量多的,写在前面
- 嵌套if else结构如果不加大括号,会怎么样?
package com.imooc.flow;
public class IntCompare {
public static void main(String[] args) {
// 定义两个整型变量,并初始化
int x=5,y=10;
// 判断x和y是否相等
if(x!=y)
if(x>y)
System.out.println(x+"大于"+y);
else
System.out.println(x+"小于"+y);
else
System.out.println(x+"和"+y+"相等");
}
}
--->
5小于10 // 结果相同
上面有点Python的页面赶脚,主要通过缩进体现格式,龟叔创建时就是这么想的么 :)
3.3 可相互比较的数据类型
package com.imooc.operator;
public class Test2 {
public static void main(String[] args) {
// 定义变量
int n=5;
long l=10l;
float f=5;
double d=5;
char ch='a';
String s="a";
System.out.println(n>l); // 整数型之间,可以相互比较
System.out.println(f==d); // 浮点型之间,可以相互比较
System.out.println(n==d); // 整数型与浮点型之间,可以相互比较
System.out.println(l<f);
System.out.println(n<ch); // 整数型与字符型之间,可以相互比较:比的是字符型的编码值
System.out.println(s==n); // 字符串与整数型之间,不可相互比较
System.out.println(s==f); // 字符串与浮点型之间,不可相互比较
System.out.println(s==ch); // 字符串与字符型之间,不可相互比较
}
}
除此之外,布尔值不可与任何的数据类型进行比较。
四、switch结构
选择结构的两大结构之一。
4.1 if else结构与switch结构的区别
比较 | if else结构 | switch结构 |
---|---|---|
判断条件 | 布尔类型 是一个范围 | 是常量值 |
4.2 语法格式
注意:
- break:用于执行结束,跳出switch结构。可以让switch结构的使用更加灵活。
- default语句:有点像前面if else嵌套结构中最后的else语句,兜底的
JDK7.0之后,表达式的值可以是基本数据类型中的byte、short、int、char,以及String类型。
4.3 案例应用
从键盘输入1-7之间的任意数字,分别输出对应的信息?
- 1----星期一
- 2----星期二
- 3----星期三
- 4----星期四
- 5----星期五
- 6----星期六
- 7----星期日
1.case为整型时,进行匹配
package com.imooc.flow;
import java.util.Scanner;
public class WeekDemo1 {
public static void main(String[] args) {
// 提示信息,键盘输入数据
System.out.println("请输入1-7之间的数字:");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
switch (n) { // Eclipse中,格式化代码自动缩进:右键|Sourse|Format。
case 1:
System.out.println("星期一");
case 2:
System.out.println("星期二");
case 3:
System.out.println("星期三");
case 4:
System.out.println("星期四");
case 5:
System.out.println("星期五");
case 6:
System.out.println("星期六");
case 7:
System.out.println("星期日");
default:
System.out.println("该数字超出了1-7的范围!");
}
}
}
--->
请输入1-7之间的数字:
3 // 因为缺少了break的语句,所以case3及其以后都会执行
星期三
星期四
星期五
星期六
星期日
该数字超出了1-7的范围!
改正:
package com.imooc.flow;
import java.util.Scanner;
public class WeekDemo1 {
public static void main(String[] args) {
// 提示信息,键盘输入数据
System.out.println("请输入1-7之间的数字:");
Scanner sc = new Scanner(System.in);
int n = sc.nextInt(); // 这里必须输入整型噢
switch (n) {
case 1:
System.out.println("星期一");break; // 增加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("该数字超出了1-7的范围!");
}
}
}
--->
请输入1-7之间的数字:
3
星期三
请输入1-7之间的数字:
8
该数字超出了1-7的范围!
请输入1-7之间的数字:
a
Exception in thread "main" java.util.InputMismatchException // 因为输入的不是整型,所以报出异常,后续讲
2.case为字符串类型时,进行匹配
上述是通过整型进行匹配,下面用字符串类型进行匹配:
package com.imooc.flow;
import java.util.Scanner;
public class WeekDemo2 {
public static void main(String[] args) {
// 提示信息,键盘输入数据
System.out.println("请输入表示星期的英文单词:");
Scanner sc = new Scanner(System.in);
String week = sc.next(); // 这里已是next(),不再是之前的nextInt()
switch (week) {
case "MONDAY":
System.out.println("星期一");break;
case "TUESDAY":
System.out.println("星期二");break;
case "WEDNESDAY":
System.out.println("星期三");break;
case "THURSDAY":
System.out.println("星期四");break;
case "FRIDAY":
System.out.println("星期五");break;
case "SATURDAY":
System.out.println("星期六");break;
case "SUNDAY":
System.out.println("星期日");break;
default:
System.out.println("单词输入错误!");
}
}
}
--->
请输入表示星期的英文单词:
TUESDAY
星期二
请输入表示星期的英文单词:
tuesday
单词输入错误! // 不合理啊,能不能不区分大小写?
改为:
package com.imooc.flow;
import java.util.Scanner;
public class WeekDemo2 {
public static void main(String[] args) {
// 提示信息,键盘输入数据
System.out.println("请输入表示星期的英文单词:");
Scanner sc = new Scanner(System.in);
String week = sc.next();
week=week.toUpperCase(); // 将用户输入的字符串中的字符,全部改为大写
switch (week) {
case "MONDAY":
System.out.println("星期一");break;
case "TUESDAY":
System.out.println("星期二");break;
case "WEDNESDAY":
System.out.println("星期三");break;
case "THURSDAY":
System.out.println("星期四");break;
case "FRIDAY":
System.out.println("星期五");break;
case "SATURDAY":
System.out.println("星期六");break;
case "SUNDAY":
System.out.println("星期日");break;
default:
System.out.println("单词输入错误!");
}
}
}
--->
请输入表示星期的英文单词:
Tuesday
星期二
Comments | NOTHING