在程序中,程序运行的流程控制决定程序是如何执行的,主要有三大流程控制语句:
(1) 顺序控制
(2) 分支控制
(3) 循环控制
从上到下。
分支控制 if-else 介绍:
让程序有选择的的执行,分支控制有三种
(1)单分支 if
(2)双分支 if-else
(3)多分支 if-else if -…-else
基本语法
if(表达式){执行代码块;}
说明:当条件表达式为ture时,就会执行 {} 的代码。如果为false ,就不执行。特别说明,如果中只有一条语句,则可不用。
import java.util.Scanner;
public class Case7 {
public static void main(String[] args) {
// 应该定义一个 Scanner 对象
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入年龄:");
// 把年龄保存到一个变量 int age
int age = myScanner.nextInt();
// 使用 if 判断,输出对应信息
if (age >= 18) {
System.out.println("你年龄大于 18,要对自己的行为负责,送入监狱");
}
}
}
基本语法
if(条件表达式){执行语句1;}
else{执行语句2;}
说明:当条件表达式成立,即执行代码块1,否则执行代码块2。
import java.util.Scanner;
public class Case8 {
public static void main(String[] args) {
// 应该定义一个 Scanner 对象
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入年龄:");
// 把年龄保存到一个变量 int age
int age = myScanner.nextInt();
// 使用 if-else 判断,输出对应信息
if (age >= 18) {
System.out.println("你年龄已满 18,要对自己的行为负责,送入监狱");
} else {// 双分支
System.out.println("你的年龄不大这次放过你了");
}
System.out.println("程序继续...");
}
}
import java.util.Scanner;
public class Case9 {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入第一个数字的大小:");
double d1 = myScanner.nextDouble();
System.out.println("请输入第二个数字的大小:");
double d2 = myScanner.nextDouble();
if (d1 > 10.0 && d2 < 20.0) {
double sum = d1 + d2;
System.out.println("d1 + d2 = " + sum);
}
}
}
import java.util.Scanner;
public class Case10 {
public static void main(String[] args) {
// 键盘输入两个变量 int,判断二者的和,是否能被 3 又能被 5 整除,打印提示信息
Scanner myScanner = new Scanner(System.in);
int a = myScanner.nextInt();
int b = myScanner.nextInt();
int sum = a + b;
if (sum % 3 == 0 && sum % 5 == 0) {
System.out.println("sum=" + sum + ",能被 3 整除且能被 5 整除");
} else {
System.out.println("sum=" + sum + ",不能被 3 整除或者不能被 5 整除");
}
}
}
==输入 20 30 ==
输入 12 11
import java.util.Scanner;
public class Case1 {
// 判断一个年份是否是闰年,闰年的条件是符合下面二者之一:
// (1)年份能被 4 整除,但不能被 100 整除;(2)能被 400整除。
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
int year = myScanner.nextInt();
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
System.out.println(year + "是闰年");
} else {
System.out.println(year + "不是闰年");
}
}
}
2022
2020
基本语法
if(表达式){执行语块1;}
else if(表达式){执行语块2;}
......
else{执行语块n;}
特别说明:
(1)多分支可以没有else,如果所有的条件表达式都不成立,则一个执行入口都没有。
(2)如果有else ,如果所有的条件表达式都不成立,则默认执行else代码块。
如果:
import java.util.*;
public class Case2 {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
double score = myScanner.nextDouble();
if (score == 100) {
System.out.println("信用极好");
} else if (score > 80 && score <= 99) {
System.out.println("信用优秀");
} else if (score > 60 && score <= 80) {
System.out.println("信用一般");
} else {
System.out.println("信用不及格");
}
}
}
考虑不周,如果输入的数字小于0或者大于100就会出现问题
优化后,方法一:
import java.util.*;
public class Case2 {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
double score = myScanner.nextDouble();
if (score == 100) {
System.out.println("信用极好");
} else if (score > 80 && score <= 99) {
System.out.println("信用优秀");
} else if (score > 60 && score <= 80) {
System.out.println("信用一般");
} else if(score > 0 && score <= 60){
System.out.println("信用不及格");
} else {
System.out.println("请输入0到100的整数!");
}
}
}
优化后,方法二(嵌套)
import java.util.*;
public class Case2 {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
double score = myScanner.nextDouble();
if (score >= 1 && score <= 100) {
if (score == 100) {
System.out.println("信用极好");
} else if (score > 80 && score <= 99) {
System.out.println("信用优秀");
} else if (score > 60 && score <= 80) {
System.out.println("信用一般");
} else {
System.out.println("信用不及格");
}
} else {
System.out.println("请输入0到100的整数!");
}
}
}
基本介绍:在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支,外面的分支结构称为外层分支。不要超过 3 层 (可读性不好)。
基本语法
if(条件){
if(条件){
......;
else{...}
}
else{...}
}
import java.util.Scanner;
public class Case3 {
// 参加歌手比赛,如果初赛成绩大于 8.0 进入决赛,否则提示淘汰。
// 并且根据性别提示进入男子组或女子组。
// 输入成绩和性别,进行判断和输出信息。
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入该歌手的成绩:");
double score = myScanner.nextDouble();
if (score > 8.0) {
System.out.println("请输入性别:");
char gender = myScanner.next().charAt(0);//如果输入“男生” charAt(0)获取字符串的第一个字符,即 男
if (gender == '男') {
System.out.println("进入男子组");
} else if (gender == '女') {
System.out.println("进入女子组");
} else {
System.out.println("你的性别有误,不能参加决赛~");
}
} else {
System.out.println("你已经被淘汰了");
}
}
}
4到10月旺季:
成人(18-60):60
儿童(<18):半价
老人(>60):1/3
淡季:
成人:40
其他:20
思路分析:(1)淡旺季 if - else (2)在旺季中,可以使用多分支处理三种情况(3)在淡季情况,使用双分支处理。
import java.util.Scanner;
public class Case4 {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入月份和年龄:");
int month = myScanner.nextInt();
int age = myScanner.nextInt();
if (month >= 4 && month <= 10) {
if (age < 18) {
System.out.println("票价为30元");
}
if (age >= 18 && age <= 60) {
System.out.println("票价为60元");
} else {
System.out.println("票价为20元");
}
} else {
if (age >= 18 && age <= 60) {
System.out.println("票价为40元");
} else {
System.out.println("票价为20元");
}
}
}
}
基本语法
switch(表达式){//表达式必须是一个对应的值
case 常量1 : 语句块1;break;
......
case 常量n : 语句块n;break;
default : 语句块;break;//常量1到n都没有匹配到就执行这条语句
}
a 表示星期一,b 表示星期二 …
import java.util.Scanner;
public class Case5 {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入字母(a 到 g):");
char ch = myScanner.next().charAt(0);
switch (ch) {
case 'a':
System.out.println("今天星期一");
break;
case 'b':
System.out.println("今天星期二");
break;
case 'c':
System.out.println("今天星期三");
break;
case 'd':
System.out.println("今天星期四");
break;
case 'e':
System.out.println("今天星期五");
break;
case 'f':
System.out.println("今天星期六");
break;
case 'g':
System.out.println("今天星期天");
break;
default:
System.out.println("请输入字母(a 到 g)!");
break;
}
}
}
输入a
输入h
1. 表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互比较的类型,比如输入的是字符,而常量是int。
2. switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum[枚举].,String)。
import java.util.Scanner;
public class Case6 {
public static void main(String[] args) {
// 使用 switch 把小写类型的 char 型转为大写(键盘输入)。
// 只转换 a, b, c, d, e. 其它的输出 "other"。
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入小写字母:");
char ch = myScanner.next().charAt(0);
// A 对应值为65,a 对应值为97
switch (ch) {
case 'a':
System.out.println("A");
break;
case 'b':
System.out.println("B");
break;
case 'c':
System.out.println("C");
break;
case 'd':
System.out.println("D");
break;
case 'e':
System.out.println("E");
break;
default:
System.out.println("other");
break;
}
}
}
输入a
输入z
if-else语句
import java.util.Scanner;
public class Case7 {
// 对学生成绩大于 60 分的,输出"合格"。低于 60 分的,
// 输出"不合格"。(注:输入的成绩不能大于 100)
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
int score = myScanner.nextInt();
if (score >= 0 && score <= 100) {
if (score < 60) {
System.out.println("不合格");
} else {
System.out.println("合格");
}
} else {
System.out.println("请输入100以内的自然数!");
}
}
}
输入50
输入80
输入120
switch语句
import java.util.Scanner;
public class Case7 {
// 对学生成绩大于 60 分的,输出"合格"。低于 60 分的,
// 输出"不合格"。(注:输入的成绩不能大于 100)
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
int score = myScanner.nextInt();
if (score >= 0 && score <= 100) {
switch ((int) (score / 60)) {
case 0:
System.out.println("不合格");
break;
case 1:
System.out.println("合格");
break;
// default :
// System.out.println("输入有误");
}
} else {
System.out.println("输入的成绩在 0-100!");
}
}
}
import java.util.Scanner;
public class Case8 {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入1~12:");
int month = myScanner.nextInt();
switch (month) {
case 3:
case 4:
case 5:System.out.println("春季");break;
case 6:
case 7:
case 8:System.out.println("夏季");break;
case 9:
case 10:
case 11:System.out.println("秋季");break;
case 12:
case 1:
case 2:System.out.println("冬季");break;
default:System.out.println("请输入1~12!");
}
}
}
(1)如果判断的具体数值不多,而且符合 byte、 short 、int、 char, enum[枚举], String 这 6 种类型。两个语句都可以使用,建议使用 swtich 语句。
(2)其他情况:对区间判断,对结果为 boolean 类型判断,使用 if,if 的使用范围更广。
import java.util.Scanner;
public class Case10 {
// 编写一个 main 方法
public static void main(String[] args) {
// 打印出九九乘法表
int i, j;
for (i = 1; i <= 9; i++) {// i 表示前一个数
for (j = 1; j <= i; j++) {// j 表示后一个数
int sum = i * j;
System.out.print(" " + i + "*" + j + "=" + sum +"\t");
if(i == j){
System.out.print("\n");//当换行条件成立时,进行换行打印
}
}
}
}
}