Java基础03-流程控制语句

1、数据输入

我们可以通过 Scanner 类来获取用户的输入。
步骤:

  1. 导包。Scanner 类在java.util包下,所以需要将该类导入。导包的语句需要定义在类的上面。
import java.util.Scanner;
  1. 创建Scanner 对象
Scanner sc = new Scanner(System.in);// 创建Scanner对象,sc表示变量名,其他均不可变
  1. 接收数据
 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

思路:

  1. 获取所有的三位数,准备进行筛选,最小的三位数为100,最大的三位数为999,使用for循环获取
  2. 获取每一个三位数的个位,十位,百位,做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、三种循环的区别:

  • 三种循环的区别
    1. for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
    2. do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)

  • for循环和while的区别

    1. 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
    2. 条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用
  • 死循环(无限循环)的三种格式

    1. for ( ; ; ){}
    2. while(true){}
    3. do {} while(true);

4、跳转控制语句(掌握)

  • 跳转控制语句(break)

    1. 跳出循环,结束循环
  • 跳转控制语句(continue)

    1. 跳过本次循环,继续下次循环

注意: 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(-----------);
	}
}
  • 理解

    1. 整个内循环,就是外循环的一个循环体,内部循环体没有执行完毕,外循环是不会
      继续向下执行的
  • 结论

    1. 外循环执行一次,内循环执行一圈

6、Random

6.1、random产生随机数(掌握)
  • 概述:

Random类似Scanner,也是Java提供好的API,内部提供了产生随机数的功能

  • 使用步骤:
  1. 导入包
    import java.util.Random;

  2. 创建对象
    Random r = new Random();

  3. 产生随机数
    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;
			}
		}
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值