流程控制语句
1 Scanner控制台输入
使用方式:
- 导包:
import java.util.Scanner;
- 创建变量
Scanner 变量名 = new Scanner(System.in);
- 使用
变量名.nextInt();
public static void main(String[] args) {
// 获取用户键盘录入的信息
Scanner scanner = new Scanner(System.in);
// 使用方法获取用户输入的信息 用户使用键盘输入数字回车后,会把数字赋值给i
System.out.println("请输入一个整数:");
int i = scanner.nextInt();
System.out.println("i的值是" + i);
}
2 流程控制语句
2.1 概述
在一个程序执行过程中,各条语句的执行顺序对于程序的结果是有直接影响的。所以我们必须清楚的知道每条语句的执行流程,而且很多时候我们要通过控制语句的执行顺序来实现我们要完成的功能。
分类:
- 顺序结构
- 选择结构
- 循环结构
2.2 顺序结构
代码按照行号从上到下执行就是顺序结构。
public static void main(String[] args) {
System.out.println("一天晚上");
System.out.println("两个和尚");
System.out.println("三更半夜");
System.out.println("四处流浪");
}
2.3 选择结构
选择结构也称之为分支结构。又分为if语句和switch语句。
2.3.1 if语句
if语句分为三种格式
第一种格式:
if (布尔表达式){
代码;
}
如果布尔表达式的结果是true,那么就会执行if语句的{}中的代码,如果布尔表达式的结果是false,那么就不会执行{}中的代码。
流程图:
注意点:如果if语句结构中只有一行代码,可以省略{}
public static void main(String[] args) {
// 让用户输入一个年龄,判断是否可以进成人娱乐场所
System.out.println("一个人闲的没事在游荡");
System.out.println("发现一个成人娱乐场所");
// 创建Scanner
Scanner scanner = new Scanner(System.in);
// 提供用户输入年龄
System.out.println("请输入您的年龄:");
// 获取用户录入的年龄
int age = scanner.nextInt();
// 判断用户是否成年
if(age >= 18) {
System.out.println("开机");
System.out.println("上号");
System.out.println("骂人");
System.out.println("挂机");
System.out.println("下机");
}
System.out.println("回家睡觉~");
}
第二种格式:
if (布尔表达式){
语句1;
}else{
语句2;
}
执行流程:
如果布尔表达式的结果是true,那么执行语句1
如果布尔表达式的结果是false,那么执行语句2
流程图
练习:用户输入一个整数,判断是奇数还是偶数
public static void main(String[] args) {
// 用户输入一个整数,判断是奇数还是偶数
// 创建Scanner
Scanner scanner = new Scanner(System.in);
// 提醒用户输入整数
System.out.println("请输入一个整数:");
// 获取用户输入的整数
int num = scanner.nextInt();
// 判断是奇数还是偶数 如果能够被2整除 就是偶数 否则就是奇数
if (num % 2 == 0){
System.out.println(num + "是偶数");
}else {
System.out.println(num + "是奇数");
}
}
第三种格式:
if (布尔表达式1){
语句1;
}else if(布尔表达式2){
语句2;
}else if(布尔表达式3){
语句3;
}
...
else {
语句n;
}
执行流程:
- 首先判断布尔表达式1结果是true还是false
- 如果是true执行语句1,整个流程结束
- 如果是false就继续判断布尔表达式2的结果是true还是false
- 如果是true执行语句2,整个流程结束
- 如果是false就继续判断布尔表达式3的结果是true还是false
- 如果是true就执行语句3,整个流程结束
- 如果是false就继续判断...
- 如果所有的布尔表达式的结果都是false,就执行else中的语句n,整个流程结束
流程图
练习:
x和y的关系满足如下:
x>= 3 y = 2x + 1
-1<x<3 y = 2x
x<=-1 y= 2x - 1
给定一个x的值,获取y的值
public static void main(String[] args) {
/*
* x和y的关系满足如下:
x>= 3 y = 2x + 1
-1<x<3 y = 2x
x<=-1 y= 2x - 1
给定一个x的值,获取y的值
* */
// 创建Scanner
Scanner scanner = new Scanner(System.in);
// 获取用户输入的数字
int x = scanner.nextInt();
int y;
if (x >= 3){
y = 2 * x + 1;
}else if (x < 3 && x > -1){
y = 2 * x;
}else{
y = 2 * x - 1;
}
System.out.println("y的值是:" + y);
}
课堂练习:
根据用户输入的月份,显示正确的季节。
public static void main(String[] args) {
// 根据用户输入的月份,显示正确的季节。
// 获取用户输入的月份
Scanner scanner = new Scanner(System.in);
int month = scanner.nextInt();
if (month == 1 || month == 2 || month == 3){
System.out.println("浅草才能没马蹄");
}else if (month == 4 || month == 5 || month == 6){
System.out.println("夏天去河里游泳~");
}else if (month == 7 || month == 8 || month == 9){
System.out.println("秋天去偷柿子");
}else if (month == 10 || month == 11 || month == 12){
System.out.println("冬天玩雪~");
}else {
System.out.println("sb");
}
}
键盘录入学生成绩,判断学生的等级
90-100 优秀
80-90 好
70-80 良
60-70 及格
60以下 不及格
public static void main(String[] args) {
// 键盘录入学生成绩,判断学生的等级
// 90-100 优秀
// 80-90 好
// 70-80 良
// 60-70 及格
// 60以下 希望之星
// 获取学生的成绩
Scanner scanner = new Scanner(System.in);
int score = scanner.nextInt();
// 显示学生的等级
if (score >=90 && score <= 100){
System.out.println("学生的成绩是优秀");
}else if (score >= 80 &&score < 90){
System.out.println("学生的成绩是好");
}else if (score >= 70 && score < 80){
System.out.println("学生的成绩是良");
}else if (score >= 60 && score < 70){
System.out.println("学生成绩是及格");
}else if (score < 60 && score >=0){
System.out.println("学生成绩是不及格");
}else {
System.out.println("您输入的成绩不合法,请检查!");
}
}
2.3.2 switch语句
格式:
switch(表达式){
case 目标值1:
语句体1;
break;
case 目标值2:
语句体2;
break;
...
default:
语句体n;
break;
}
- 格式解释
- switch表示这个是一个switch语句
- 表达式的类型可以是byte,short,int,char
- JDK5之后可以是枚举
- JDK7之后可以是字符串
- case 后面跟的是要和表达式进行比较的值
- 语句体部分可以是一条或者多条语句
- break表示中断,结束的意思。可以结束switch语句
- default语句表示所有情况都不匹配时执行该处的语句体,和if语句中的else相同
- 执行流程
- 首先计算出表达式的值
- 然后和case依次进行比较,一旦有匹配的值,就会执行相应的语句,在执行过程中遇到break就会立即结束switch语句。
- 如果都不匹配,执行default中的语句。
流程图
练习:根据键盘录入的数值1,2,3..7 输出对应的是周几
public static void main(String[] args) {
// 调整代码格式 ctrl + alt + L
// 根据键盘录入的数值1,2,3..7 输出对应的是周几
// 获取用户录入的数值
Scanner scanner = new Scanner(System.in);
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("sb");
break;
}
}
注意事项:
- default的break如果在switch语句的最后,可以省略,但是不建议省略。
- switch中的case语句顺序不影响最终结果
- case具有穿透效果,如果没有break的影响,那么代码会一直向下执行。
课堂练习: 根据用户输入的月份,输出对应的季节。使用switch语句实现。
public static void main(String[] args) {
// 根据用户输入的月份,输出对应的季节。
// 获取用户输入的月份
Scanner scanner = new Scanner(System.in);
int month = scanner.nextInt();
switch (month){
case 1:
case 2:
case 3:
System.out.println("春天花会开~");
break;
case 4:
case 5:
case 6:
System.out.println("夏天吃西瓜");
break;
case 7:
case 8:
case 9:
System.out.println("秋天吃苹果~");
break;
case 10:
case 11:
case 12:
System.out.println("冬天烤红薯");
break;
default:
System.out.println("输入有误!");
break;
}
}
2.4 循环结构
2.4.1 概述
循环语句可以在满足循环条件的情况下,反复执行某一段代码。
2.4.2 循环语句的组成
- 循环变量初始化(初始化表达式 笔墨伺候 只需要执行一次)
- 循环出口(布尔表达式)
- 这是一个boolean表达式,这个表达式能决定是否执行循环体
- 循环体
- 就是需要多次循环执行的代码
- 步进表达式
- 这个部分是在一次循环结束后,下一次循环判断条件执行前执行,用来计算循环的次数
2.4.3 for循环结构
格式:
for (初始化表达式1;布尔表达式2;步进表达式4){
循环体3;
}
- 执行流程
- 1 2 3 4 2 3 4 2 3 4 .... 2
- 先执行初始化表达式,只会执行一次,然后执行布尔表达式,如果布尔表达式的结果是true,那么会执行循环体,循环体执行完毕后执行步进表达式,然后继续执行布尔表达式,如果是true继续循环。如果是false,结束循环。
练习:
- 在控制台输出100次HelloWorld
for (int i = 1;i <= 100;i++){
System.out.println("HelloWorld" + i);
}
- 打印输出1-5和5-1
// 输出1-5
for (int i = 1;i <= 5;i++){
System.out.println(i);
}
// 输出5-1
for (int i = 5;i >= 1;i--){
System.out.println(i);
}
- 求1-100之间的偶数和
// 求1-100之间的偶数和
// 表示偶数和
int sum = 0;
for (int i = 1;i <= 100;i++){
// 判断i是否是偶数
if (i % 2 == 0){
// 偶数
sum += i;
}
}
System.out.println("1-100的偶数和是" + sum);
}
int sum = 0;
for (int i = 2;i <= 100;i += 2){
sum += i;
}
System.out.println("1-100的偶数和是" + sum);
- 统计"水仙花数"一共有多少个
- "水仙花数"就是一个三位数,其中个位的立方 + 十位的立方 + 百位的立方 正好等于其本身。
// 统计水仙花数有多少个
int count = 0;
for (int i = 100;i < 1000;i++){
// 获取个位
int ge = i % 10;
// 获取十位
int shi = i / 10 % 10;
// 获取百位
int bai = i / 10 / 10 % 10;
if (ge * ge * ge + shi * shi * shi + bai * bai * bai == i){
System.out.println("水仙花数是" + i);
count++;
}
}
System.out.println("水仙花数总共有" + count + "个");
2.4.4 循环结构while
格式
基本格式
while (布尔表达式){
循环体;
}
扩展格式
初始化表达式1;
while(布尔表达式2){
循环体3;
步进表达式4;
}
执行顺序: 1 2 3 4 2 3 4...2
练习:
- 输出100次HelloWorld
// 输出100次HelloWorld
int i = 1;
while (i <= 100){
System.out.println("HelloWorld" + i);
i++;
}
- 求出1-100的和
// 求出1-100的和
int i = 1;
// 1-100的和
int sum = 0;
while (i <= 100){
sum += i;
i++;
}
System.out.println("1-100的和是" + sum);
- 输出水仙花数有多少个
int i = 100;
int count = 0;
while (i < 1000){
// 获取个位
int ge = i % 10;
// 获取十位
int shi = i / 10 % 10;
// 获取百位
int bai = i / 10 /10 % 10;
if (ge * ge * ge + shi * shi * shi + bai * bai * bai == i){
count++;
}
i++;
}
System.out.println("水仙花数总共有" + count + "个");
2.4.5 循环结构doWhile
格式:
基本格式:
do{
循环体语句;
}while(布尔表达式);
扩展格式:
初始化表达式1;
do{
循环体语句3;
步进表达式4;
}while(布尔表达式2);
执行顺序:1 3 4 2 3 4 2 3 4...2不满足为止
练习:
- 输出100次HelloWorld
// 输出100次HelloWorld
int i = 1;
do{
System.out.println("HelloWorld");
i++;
}while (i <= 100);
- 求出1-100之和
自己练习
- 统计水仙花数有多少个
int i = 100;
int count = 0;
do {
// 个位
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++;
}
i++;
}while (i < 1000);
System.out.println("水仙花数有" + count + "个");
2.4.6 三种循环的区别
- dowhile循环的循环体至少会执行一次,for循环和while循环只有在条件成立时才会去执行循环体
- for循环和while循环的小区别:
- 大部分情况下,for循环和while循环可以互相转换
- 控制条件语句的那个变量在for循环结束后就不能再使用了,while循环的那个变量还可以使用
使用推荐:for --> while -->dowhile
2.4.7 死循环
死循环就是一直执行的循环,循环的条件一直是true。
又称之为永真循环,无限循环。
while(true){} 推荐
for (;true;){}
for (;
标签:语句,控制,int,流程,System,println,表达式,out From: https://www.cnblogs.com/460759461-zeze/p/18193964