Java流程控制语句
1 控制台输入
获取用户在控制台输入的内容,使用引用数据类型Scanner
使用Scanner步骤:
- 导包
- 创建
- 使用
// 声明当前类所在的包
package cn.javasm.demo;
// 导包
import java.util.Scanner;
public class TestDemo {
public static void main(String[] args) {
// 创建
// 类型 变量名 = new 类型(System.in);
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数:");
// 使用
// 获取int类型的数据
int a = scanner.nextInt();
System.out.println("用户输入的是" + a);
// String是引用数据类型 表示字符串
// 获取用户输入的字符串
String str = scanner.next();
System.out.println(str);
}
}
2 流程控制语句
程序在执行过程中,各条语句的执行顺序对程序的结果是有直接的影响的。也就是说程序的流程对运行结果有直接的影响。所以我们必须要清楚每一条语句的执行流程。
分类:
- 顺序结构
- 选择结构
- 循环结构
2.1 顺序结构
顺序结构就是代码从上到下执行。默认都是顺序结构。
public static void main(String[] args) {
System.out.println("今天是6月6号");
System.out.println("明天就要高考了");
System.out.println("下星期穿少点,太热了");
}
2.2 选择结构
选择结构也叫分支结构,根据不同的条件执行不同的代码。
选择结构分为:
- if语句
- switch语句
2.2.1 if语句
if语句分为三种格式
2.2.1.1 if语句格式1
格式:
if (布尔表达式){
语句体;
}
执行流程:
- 首先判断布尔表达式的结果是true还是false
- 如果是true就执行语句体
- 如果是false就不执行语句体,直接执行其他语句
public static void main(String[] args) {
System.out.println("一天晚上闲的没事干,在大街游荡~");
System.out.println("发现一个网吧");
int age = 17;
if (age >= 18){
System.out.println("掏身份证开机");
System.out.println("上号");
System.out.println("开始骂人");
System.out.println("挂机");
System.out.println("下机");
}
System.out.println("回家睡觉");
}
注意:如果if语句中只有一行代码,可以省略大括号
流程图:
2.2.1.2 if语句格式2
格式:
if (布尔表达式){
语句体1;
}else{
语句体2;
}
执行流程:
- 首先判断布尔表达式的结果是true还是false
- 如果是true就执行语句体1
- 如果是false就执行语句体2
public static void main(String[] args) {
// 创建
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的年龄:");
// 使用
int age = scanner.nextInt();
if (age >= 18){
System.out.println("成年人要为自己做的事负责");
}else {
System.out.println("未成年人可以少负责");
}
}
流程图
课堂练习: 输入一个整数,输出这个数是奇数还是偶数
public static void main(String[] args) {
// 输入一个整数,输出这个数是奇数还是偶数
// alt + 回车 自动导包
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个整数:");
int num = scanner.nextInt();
// 判断是奇数还是偶数
if (num % 2 == 0){
System.out.println(num + "是偶数");
}else {
System.out.println(num + "是奇数");
}
}
2.2.1.3 if语句格式3
格式:
if (布尔表达式1){
语句体1;
}else if(布尔表达式2){
语句体2;
}else if(布尔表达式3){
语句体3;
}else if(布尔表达式4){
语句体4;
}
...
else if(布尔表达式n){
语句体n;
}else{
语句体n + 1;
}
执行流程:
- 首先判断布尔表达式1的结果是true还是false
- 如果是true就执行语句体1
- 如果是false就继续判断布尔表达式2的结果是true还是false
- 如果是true就执行语句体2
- 如果是false就继续判断布尔表达式3的结果是true还是false
- .....
- 如果没有任何布尔表达式的结果是true,就执行语句体n + 1
流程图:
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int age = scanner.nextInt();
if (age > 0 && age < 7){
System.out.println("婴幼儿");
}else if (age >= 7 && age < 12){
System.out.println("儿童");
}else if (age >= 12 && age < 18){
System.out.println("少年");
}else if (age >= 18 && age < 40){
System.out.println("青年");
}else if (age >= 40 && age < 60){
System.out.println("中年");
}else if (age >= 60 && age < 110){
System.out.println("老年");
}else {
System.out.println("妖怪~");
}
}
课堂练习:
x >= 10 y = 3x + 1
-2 < x < 10 y = 3x
x <= -2 y = 3x - 1
让用户输入x的值,计算出y的值并输出
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个x的值");
int x = scanner.nextInt();
int y;
if (x >= 10){
y = 3 * x + 1;
}else if(x > -2 && x < 10){
y = 3 * x;
}else {
y = 3 * x - 1;
}
System.out.println("y的值是" + y);
}
课堂练习:根据用户输入的月份,输出正确的季节
public static void main(String[] args) {
// 根据用户输入的月份,输出正确的季节
Scanner scanner = new Scanner(System.in);
System.out.println("请输入月份");
int month = scanner.nextInt();
if (month >= 3 && month <= 5){
System.out.println("春天去郊游");
}else if (month >= 6 && month <= 8){
System.out.println("夏天吃西瓜");
}else if (month >= 9 && month <= 11){
System.out.println("秋天吃柿子");
}else if (month == 12 || month == 1 || month == 2){
System.out.println("冬天烤红薯");
}else {
System.out.println("您输入的月份不正确!");
}
}
2.2.2 switch语句
格式:
switch (表达式){
case 目标值1:
语句体1;
break;
case 目标值2:
语句体2;
break;
...
case 目标值n:
语句体n;
break
default:
语句体n + 1;
break;
}
解释:
- 表达式的取值类型可以是 byte short int char
- JDK5之后可以是枚举
- JDK7之后可以是字符串
- case 后面是要和表达式进行比较的值
- 语句体可以是一条语句,也可以是多条语句
- break表示中断,可以立即结束switch语句
- default语句表示所有的目标值都没有匹配时,执行default中的语句体
执行流程:
- 首先计算表达式的值
- 使用表达式的值依次和case的目标值进行比较,如果相同就执行对应的语句体。
- 如果都不相同,就执行default语句
public static void main(String[] args) {
// 根据用户输入的数字,显示正确的星期几
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数字");
int weekday = scanner.nextInt();
switch (weekday){
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("请输入1-7的整数");
break;
}
}
流程图:
注意点:
- default中的break如果在代码的最后,可以省略
- switch语句中的顺序不影响最终的结果
- case具有穿透效果。如果没有break的影响,会一直执行下去。
课堂练习:
根据用户输入的月份,输出正确的季节
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入对应的月份");
int month = scanner.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("傻der~");
break;
}
}
2.3 循环结构
2.3.1 概述
循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称之为循环体语句。当反复执行这个循环体时,需要在合适的时候把循环判断条件修改为false从而结束循环。
循环语句:
- for循环
- while循环
- do-while循环
2.3.2 循环语句的组成
- 循环变量初始化(初始化表达式):
一条或者多条语句,这些语句完成一些初始化操作
- 循环出口(布尔表达式)
这是一个boolean表达式,这个表达式能决定是否要继续执行循环体
- 循环语句(循环体)
这个部分是真正要多次执行的代码
- 循环增量(步进表达式)
这个部门在一次循环体结束后,下一次循环判断条件执行前执行。通过控制循环条件变量,使得循环在合适的时候结束。
2.3.3 for循环结构
格式:
for (初始化表达式1;布尔表达式2;步进表达式4){
循环体3;
}
执行流程:
执行顺序: 1 2 3 4 2 3 4 ..... 2
如果布尔表达式的结果是true,那么就继续循环,如果结果是false,就结束循环
流程图:
public static void main(String[] args) {
// // 打印100次HelloWorld
// for (int i = 1;i <= 100;i++){
// System.out.println("HelloWorld" + i);
// }
//
// // 打印10 - 1
// for (int i = 10;i >= 1;i--){
// System.out.println(i);
// }
// 求1-100之间的偶数和
// 代表和的变量
// int sum = 0;
// for (int i = 1;i <= 100;i++){
// // 判断i是否是偶数
// if (i % 2 == 0){
// sum += i;
// }
// }
// // shift + alt + 上下键
// System.out.println("和是" + sum);
// 统计"水仙花数"的个数
// 水仙花数是一个三位数,其中个位的立方 + 十位的立方 + 百位的立方和 等于 这个三位数自身
// 153 3 * 3 * 3 + 5 * 5 * 5 + 1 * 1 * 1 = 153
// 水仙花数的个数
int count = 0;
for (int i = 100;i < 1000;i++){
// 获取i的个位十位和百位
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100 % 10;
if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i){
count++;
}
}
System.out.println("水仙花数有" + count + "个");
}
2.3.4 while循环结构
基本格式:
while (布尔表达式){
循环体语句;
}
扩展格式:
初始化表达式1;
while (布尔表达式2){
循环体语句3;
步进表达式4;
}
执行顺序: 1 2 3 4 2 3 4 ...2
流程图:
public static void main(String[] args) {
// 输出100次HelloWorld
// int i = 1;
// while (i <= 100){
// System.out.println("HelloWorld");
// i++;
// }
// 求1-100之间的偶数和
// int sum = 0;
// int i = 2;
// while (i <= 100){
// sum += i;
//
// i += 2;
// }
// System.out.println("sum的值是" + sum);
// 打印水仙花数
int i = 100;
while (i < 1000){
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100;
// 判断是否是水仙花数
if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i)
System.out.println("水仙花数是" + i);
i++;
}
}
2.3.5 do-while循环结构
基本格式:
do{
循环体语句;
}while(布尔表达式);
扩展格式:
初始化表达式1;
do{
循环体语句3;
步进表达式4;
}while(布尔表达式2);
执行顺序:1 3 4 2 3 4 2 3 4 .....2
流程图:
public static void main(String[] args) {
// // 打印100次HelloWorld
// int i = 1;
// do{
// System.out.println("HelloWorld");
// i++;
// }while (i <= 100);
// 求 1- 100之和
// int i = 1;
// int sum = 0;
// do{
// sum += i;
// i++;
// }while (i <= 100);
// System.out.println("sum的值是" + sum);
// 统计水仙花数有多少个
int i = 100;
int count = 0;
do{
// 获取个位十位和百位
int ge = i % 10;
int shi = i / 10 % 10;
int bai = i / 100;
// 判断是否是水仙花数
if ((ge * ge * ge + shi * shi * shi + bai * bai * bai) == i) count++;
i++;
}while (i < 1000);
System.out.println("水仙花数总共有" + count + "个");
}
三种循环的区别?
- dowhile循环至少会执行一次循环语句
- for循环结束后,控制条件语句的那个变量就已经被回收了。但是while和doWhile循环中的变量依然存在。
- 使用推荐: for --> while -- > doWhile
注意:循环是可以嵌套的。
for (int i = 1;i <= 10;i++){
System.out.println("i = " + i);
for (int j = 1;j <= 10;j++){
System.out.println("j = " + j);
}
}
2.3.6 跳转控制语句
让循环在某一步的时候结束或者跳过某些数据不要这些数据,Java提供了跳转控制语句来中断和跳转。
- break 中断
- 可以用在循环中
- 也可以用在switch语句中
- 表示立即结束循环或者结束switch语句
- continue 继续
- 只能用在循环中
- 表示立即结束本次循环,开始下一次循环
无论是break还是continue,在多个循环嵌套中,只作用于当前循环
for (int i = 1;i <= 10;i++){
System.out.println("i = " + i);
for (int j = 1;j <= 10;j++){
// 立即结束最近的循环
if (j == 2) break;
System.out.println("j = " + j);
}
}
2.3.7 死循环
死循环又称之为永真循环,或者无限循环.就是循环的条件判断一直都是true,循环不会结束。
死循环标准写法: while(true){}
// 死循环
// while (true){
// int i = scanner.nextInt();
// System.out.println(i);
// if (i == 10) break;
// }
// for (; true; ) {
// }
// for (;;){
//
// }
String str = null;
while (!"y".equals(str)){
str = scanner.next();
System.out.println(str);
}
更多推荐


所有评论(0)