流程控制语句
1、数据输入
我们可以通过 Scanner 类来获取用户的输入。
步骤:
- 导包。Scanner 类在java.util包下,所以需要将该类导入。导包的语句需要定义在类的上面。
import java.util.Scanner;
- 创建Scanner 对象
Scanner sc = new Scanner(System.in);// 创建Scanner对象,sc表示变量名,其他均不可变
- 接收数据
int i = sc.nextInt(); // 表示将键盘录入的值作为int数返回
案例一:
import java.util.Scanner;
public class ScannerDemo{
public static void main(String [] args){
//创建对象
Scanner sc = new Scanner(System.in);
//接收数据
int x = sc.nextInt();
//输出数据
System.out.println(x);
}
}
案例二:
import java.util.Scanner;
public calss ScannerTest02{
public static void main(String [] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个和尚的身高:");
int height1 = sc.nextInt();
System.out.println("请输入第二个和尚的身高:");
int height2 = sc.nextInt();
System.out.println("请输入第三个和尚的身高:");
int height3 = sc.nextInt();
//用三元运算符获取前两个和尚的较高身高值,并用临时身高变量保存起来。
int tempHeight = height1 > height2 ? height1 : height2;
//用三元运算符获取临时身高值和第三个和尚身高较高值,并用最大身高变量保存。
int maxHeight = tempHeight > height3 ? tempHeight : height3;
//输出结果。
System.out.println("这三个和尚中身高最高的是:" + maxHeight +"cm");
}
}
2、流程控制语句分类
顺序结构
分支结构(if, switch)
循环结构(for, while, do…while)
2.1、 顺序结构
顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。
顺序结构执行流程图:
2.2、 分支结构—if语句
2.2.1、 if语句格式1
格式:
if (关系表达式) {
语句体;
}
执行流程:
-
①首先计算关系表达式的值
-
②如果关系表达式的值为true就执行语句体
-
③如果关系表达式的值为false就不执行语句体
-
④继续执行后面的语句内容
public class ifDemo{
public static void main(String[] args){
System.out.println("开始");
//定义两个变量
int a = 10;
int b = 20;
int c = 10;
//判断两个值是否相等,如果相等就在控制台输出: a等于b
if(a == b){
System.out.println("a等于b");
}
//判断两个值是否相等,如果相等就在控制台输出: a等于c
if (a == c){
System.out.println("a等于c");
}
System.out.println("结束");
}
}
2.2.2、 if语句格式2
格式:
if(关系表达式){
语句1;
}else{
语句2;
}
执行流程:
- ①首先计算关系表达式的值
- ②如果关系表达式的值为true就执行语句体1
- ③如果关系表达式的值为false就执行语句体2
- ④继续执行后面的语句内容
示例:
public class ifDemo02{
public static void main(String[] args){
//定义两个变量
int a = 10;
int b = 20;
if(a > b){
System.out.println("a的值大于b");
}else{
System.out.println("a的值小于b");
}
System.out.println("结束");
}
}
案例:奇偶数
需求:任意给出一个整数,判断该整数是奇数还是偶数,并在控制台输出
分析:
①为了体现任意给出一个整数,采用键盘录入一个数据
②判断整数是偶数还是奇数要分两种情况进行判断,使用if…else结构
③判断是否偶数需要使用取余运算符实现该功能 number % 2 == 0
④根据判定情况,在控制台输出对应的内容
import java.util.Scanner;
public class IfTest03{
public static void main(String[] args){
//从键盘获取数据
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数");
int number = sc.nextInt();
if (number % 2 == 0){
System.out.println(number + "是一个偶数");
}else{
System.out.println(number + "是一个奇数");
}
}
}
2.2.3、 if语句格式3
格式: if (关系表达式1) {
语句体1;
} else if (关系表达式2) {
语句体2;
}…else {
语句体n+1;
}
执行流程:
- ①首先计算关系表达式1的值
- ②如果值为true就执行语句体1;如果值为false就计算关系表达式2的值
- ③如果值为true就执行语句体2;如果值为false就计算关系表达式3的值
- ④…
- ⑤如果没有任何关系表达式为true,就执行语句体n+1。
案例:
import java.util.Scanner;
public class IfDemo04 {
public static void main(String[] args) {
System.out.println("开始"); // 需求:键盘录入一个星期数(1,2,...7),输出对应的星期一,星期二,...星期日
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个星期数(1-7):");
int week = sc.nextInt();
if(week == 1) {
System.out.println("星期一");
}else if(week == 2) {
System.out.println("星期二");
}else if(week == 3) {
System.out.println("星期三");
}else if(week == 4) {
System.out.println("星期四");
}else if(week == 5) {
System.out.println("星期五");
}else if(week == 6) {
System.out.println("星期六");
}else System.out.println("星期日");
}
System.out.println("结束");
}
}
2.3、switch语句
2.3.1、格式:
switch (表达式){
case 1:
语句体1;
case 2:
语句体2;
case 3:
语句体3;
break;
...
default:
语句体n+1;
break;
}
- 执行流程
1、首先计算出表达式的值
2、其次,和case依次比较,一旦有对应的值,就会执行相应的语句,在执行的过程中,遇到break就会结束。
3、最后,如果所有的case都和表达式的值不匹配,就会执行default语句体部分,然后程序结束掉。
2.3.2、 switch语句练习—春夏秋冬
- 需求:一年有12个月,分属于春夏秋冬4个季节,键盘录入一个月份,请用程序实现判断该月份属于哪个季节,并输出。
- 运行结果:
- 代码
public class Demo1{
public static void main(String[] args){
//从键盘获取数据
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个月份:");
int month = sc.nextInt();
//case 穿透
switch(month){
case 1:
case 2:
case 12:
System.out.println("冬季");
case 3:
case 4:
case 5:
System.out.println("春季");
case 6:
case 7:
case 8:
System.out.println("夏季");
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
default:
System.out.println("你输入的月份有误");
}
}
}
- 注意:如果switch中得case,没有对应break的话,则会出现case穿透的现象。
2.4、for循环
2.4.1、for循环结构
- 循环:循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体语句,当反复 执行这个循环体时,需要在合适的时候把循环判断条件修改为false,从而结束循环,否则循环将一直执行下去,形 成死循环。
- for循环格式:
for(初始化语句; 条件判断语句; 条件控制语句){
循环体;
}
- 格式解释:
初始化语句: 用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样
条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去
循环体语句: 用于表示循环反复执行的内容,简单说就是循环反复执行的事情
条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去
- 执行流程:
①执行初始化语句
②执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
③执行循环体语句
④执行条件控制语句
⑤回到②继续
2.4.2、for循环练习
练习一:在控制台输出1-5和5-1的数据
public class ForTest01{
public static void main(String[] args){
//输出数据1-5
for(int i = 1; i <= 5; i++){
System.out.println(i);
}
System.out.println("-----------------");
//输出5-1的数据
for (int i =5; i >= 1; i--){
System.println(i);
}
}
}
练习二:求1-5的和
public class ForTest02{
public static void main(String[] args){
//定义一个变量,把求和的结果保存起来,初始值为0
int sum = 0;
for(int i = 1; i <= 5; i++){
sum += i;
}
System.out.println("1-5之间的数据和为:"+sum);
}
}
练习三:求偶数和
public class ForTest03{
public static void main(String[] args){
int sum = 0;
for(int i = 1; i <= 100; i++){
if(i % 2 == 0){
sum += i;
}
}
System.out.println("1-100的偶数和为:"+sum);
}
}
练习四:水仙花
需求:在控制台输出所有的“水仙花数”
解释:什么是水仙花数?
水仙花数,指的是一个三位数,个位、十位、百位的数字立方和等于原数
例如 153 3*3*3 + 5*5*5 + 1*1*1 = 153
思路:
- 获取所有的三位数,准备进行筛选,最小的三位数为100,最大的三位数为999,使用for循环获取
- 获取每一个三位数的个位,十位,百位,做if语句判断是否是水仙花数
public class ForTest04{
public static void main(String[] args){
for(int i = 100; i < 1000; i++){
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);
}
}
}
}
练习五:统计水仙花数个数
public class ForTest05{
public static void main(String[] args){
int count = 0;
for(int i = 100; i < 1000; i++){
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++;
}
}
System.out.println("水仙花个数一共有:"+ count + "个");
}
}
本题要点:
今后如果需求带有统计xxx,请先想到计数器变量 。
计数器变量定义的位置,必须在循环外部。
2.5、while循环
2.5.1、while结构
- 格式:
初始化语句;
while (条件判断语句){
循环体语句;
条件控制语句;
}
- 流程:
①执行初始化语句
②执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
③执行循环体语句
④执行条件控制语句
⑤回到②继续
示例:
public class WhileTest{
public static void main(String[] args){
//for循环实现
for(int i=1;i <=5; i++ ){
System.out.println("HelloWorld");
}
System.out.println("------------------");
//while循环实现
int j = 1;
while(j<=5){
System.out.println("HelloWorld");
j++;
}
}
}
while循环练习1:
- 需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫
米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度?
public class WhileTest{
public static void main(String[] args){
int count = 0;
//定义纸张的厚度
double paper = 0.1;
//定义珠峰的高度
int zf =8844430;
while (paper <= zf){
paper *= 2;
count++;
}
//打印计数器的值
System.out.println("需要折叠:"+count+"次");
}
}
2.6、do…while循环结构
- 格式:
初始化语句;
do{
循环体语句;
条件控制语句;
}while(条件判断语句);
- 执行流程:
① 执行初始化语句
② 执行循环体语句
③ 执行条件控制语句
④ 执行条件判断语句,看其结果是true还是false
如果是false,循环结束
如果是true,继续执行
⑤ 回到②继续
示例:
public class DoWhileDemo {
public static void main(String[] args) {
//需求:在控制台输出5次"HelloWorld"
//for循环实现
for(int i=1; i<=5; i++) {
System.out.println("HelloWorld");
}
System.out.println("--------");
//do...while循环实现
int j = 1;
do {
System.out.println("HelloWorld");
j++;
}while(j<=5);
}
}
3、三种循环的区别:
- 三种循环的区别
- for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
- do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
-
for循环和while的区别
- 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
- 条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
-
死循环(无限循环)的三种格式
- for ( ; ; ){}
- while(true){}
- do {} while(true);
4、跳转控制语句(掌握)
-
跳转控制语句(break)
- 跳出循环,结束循环
-
跳转控制语句(continue)
- 跳过本次循环,继续下次循环
注意: continue只能在循环中进行使用!
5、循环嵌套(理解)
- 循环嵌套概述:在循环中,继续定义循环
示例:
public static void main(String[] args){
for(int hour =0; hour <24; hour++){
for(int minute = 0; minute < 60; minute++){
System.out.println(hour + " 时 "+ minute +" 分");
}
System.out.println(“-----------”);
}
}
-
理解
- 整个内循环,就是外循环的一个循环体,内部循环体没有执行完毕,外循环是不会
继续向下执行的
- 整个内循环,就是外循环的一个循环体,内部循环体没有执行完毕,外循环是不会
-
结论
- 外循环执行一次,内循环执行一圈
6、Random
6.1、random产生随机数(掌握)
- 概述:
Random类似Scanner,也是Java提供好的API,内部提供了产生随机数的功能
- 使用步骤:
导入包
import java.util.Random;创建对象
Random r = new Random();产生随机数
int num = r.nextInt(10);
解释: 10代表的是一个范围,如果括号写10,产生的随机数就是0-9,括号写20,参数的随机数则是0-19
示例代码;
import java.util.Random;
public class RandomDemo{
public static void main(String[] args){
//创建对象
Random r = new Random();
//用循环获取10个随机数
for(int i=0; i< 10; i++){
//获取随机数
int number = r.nextInt(10);
System.out.println("number:"+ number);
}
//获取1-100的随机数
int x = r.nextInt(100) + 1 ;
System.out.println(x);
}
}
6.2、random练习
- 需求:
程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少?
import java.util.Random;
import java..util.Scanner;
public class RandomTest{
public static void main(String[] args){
Random r = new Random();
int number = r.nextInt(100) + 1;
while (true){
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要猜的数字");
int guessNumber = sc.nextInt();
//比较输入的数字和系统产生的数据
if(guessNumber > number){
System.out.println("你猜的数字"+ guessNumber + " 大了");
}else if(guessNumber < number){
System.out.println("你猜的数字"+ guessNumber + " 小了");
}else{
System.out.println("恭喜你猜中了");
break;
}
}
}
}