Java基础知识及细节_总结03

基础阶段一:JavaSE学习_day03

在这里插入图片描述

流程控制语句

流程控制语句分类:

  • 顺序结构
  • 选择结构(if,switch)
  • 循环结构(for,while,do…while)

顺序结构:

顺序结构是程序中最简单最基本的流程控制,没有特定的语法结构,按照代码的先后顺序,依次执行,程序中大多数代码都是这样执行的。

选择结构

if语句

格式1
if(关系表达式) {
    
    
    语句体;
}

执行流程:

  1. 首先计算关系表达式的值
  2. 如果关系表达式为true,执行语句体
  3. 如果关系表达式为false,不执行语句体
  4. 继续执行其他语句

注意事项:

在使用格式1的情况下,如果语句体只有一行,那么可以省略大括号,不建议这么写。

if(true)
    System.out.println(“可运行!”); //不会报错,运行结果会输出两条语句。
 	System.out.println(“可运行!”);
//如果if中判断的结果是false,那么只会输出第二条语句。

不要在if小括号后加分号。

if(关系表达式); {
    
    
    System.out.println(“可运行!”);
}
//不管关系表达式是true,还是false,都会执行大括号里的语句。
格式2
if(关系表达式) {
    
    
    语句体1;
}else {
    
    
    语句体2;
}

执行流程:

  1. 首先计算关系表达式的值
  2. 如果关系表达式为true,执行语句体1
  3. 如果关系表达式为false,执行语句体2
  4. 继续执行其他语句
格式3
if(关系表达式1) {
    
    
    语句体1;
}else if(关系表达式2){
    
    
    语句体2;
}
...
else {
    
    
    语句体n;
}

执行流程:

①首先计算关系表达式1的值

②如果值为true就执行语句体1;如果值为false就计算关系表达式2的值

③如果值为true就执行语句体2;如果值为false就计算关系表达式3的值

④…

⑤如果没有任何关系表达式为true,就执行语句体n。

switch语句

格式
switch(表达式) {
    
    
	case1: 
        语句体1;
        break;
    case2:
        语句体2;
        break;
    case3:
        语句体3;
        break;
    ...
    default:
        语句体n;
        [break;]
}

格式说明:

  • switch中的表达式取值为byte、short、char、int ,JDK5以后可以是枚举,JDK7以后可以是String。

  • case后面接的是要和表达式进行比较的值。

  • break:表示总断的意思,也就是结束switch语句。

  • default:表示默认情况下执行语句体n,也就是说当所有情况都不匹配的时候,就执行default中的语句。

    ​ 和if语句中的else相似。

执行流程:

  1. 首先计算表达式的值
  2. 依次和case后面的值进行比较,如果有相同的值,就会执行相应的语句,在执行过程中,遇到break就会结束。
  3. 如果所有的case后面的值都不与表达式的值相匹配,那么就会执行default里面的语句,然后程序结束掉(当其语句体后没有break;将继续往下执行)。

注意事项

1.case后面的值不能重复。
2.case后面的值只是常量,不能是变量。
3.default可以省略,不建议。

case穿透

在switch语句中,当case控制的语句体后面没有break时,将出现穿透现象。

穿透现象当开始case穿透时,后续的case都将不具备匹配能力,并且内部的语句体都将执行。直到遇到break,或者switch语句执行完成,才会结束。

应用场景:当发现switch语句中,有多个case控制的语句体出现了重复,就可以使用case穿透来优化代码。

import java.util.Scanner;
/*
case穿透
案例:键盘录入星期数,输出工作日[1-5]、休息日[6-7]
 */
public class CaseTest {
    
    
    public static void main(String[] args) {
    
    
        Scanner sc = new Scanner(System.in);
        switch (sc.nextInt()) {
    
    
            case 1:
            case 2:
            case 3:
            case 4:
            case 5:
                System.out.println("工作日");
                break;
            case 6:
            case 7:
                System.out.println("休息日");
                break;
            default:
                System.out.println("你输入的代码有误!");
        }
    }
}

循环结构

for循环

for循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。

基础知识
for(初始化语句;条件判断语句;条件控制语句) {
    
    
    循环语句体;
}

格式解释:

  • 初始化语句: 用于表示循环开启时的起始状态,简单说就是循环开始的时候什么样
  • 条件判断语句:用于表示循环反复执行的条件,简单说就是判断循环是否能一直执行下去
  • 循环体语句: 用于表示循环反复执行的内容,简单说就是循环反复执行的事情
  • 条件控制语句:用于表示循环执行中每次变化的内容,简单说就是控制循环是否能执行下去

执行流程:

  1. 执行初始化语句。

  2. 判断条件判断语句是true还是false;

    如果是true,继续执行。

    ​ 如果是false,结束循环。

  3. 执行循环语句体。

  4. 执行条件控制语句。

  5. 返回②,继续依次往下执行。

案例-求1-5数据和
  • 需求:求1-5之间的数据和,并把求和结果在控制台输出
  • 示例代码:
public class ForTest02 {
    
    
    public static void main(String[] args) {
    
    
		//求和的最终结果必须保存起来,需要定义一个变量,用于保存求和的结果,初始值为0
		int sum = 0;
		//从1开始到5结束的数据,使用循环结构完成
		for(int i=1; i<=5; i++) {
    
    
			sum += i;
		}
		//当循环执行完毕时,将最终数据打印出来
		System.out.println("1-5之间的数据和是:" + sum);
    }
}
  • 本题要点:
    • 今后遇到的需求中,如果带有求和二字,请立即联想到求和变量
    • 求和变量的定义位置,必须在循环外部,如果在循环内部则计算出的数据将是错误的
案例-每行打印2个水仙花数(统计)
  • 需求:在控制台输出所有的“水仙花数”,要求每行打印2个

    ​ 某个三位数的个位、十位、百位各自的立方和等于原值就是水仙花数。

  • 示例代码:

public class Demo {
    
    
	/*
		需求:在控制台输出所有的“水仙花数”,要求每行打印2个
	*/
	public static void main(String[] args){
    
    
		// 1. 定义变量count,用于保存“打印过”的数量,初始值为0
		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) {
    
    
				//  2. 在判定和打印水仙花数的过程中,拼接空格, 但不换行,并在打印后让count变量+1,记录打印过的数量
				System.out.print(i + "\t");
				count++;
				// 3. 在每一次count变量+1后,判断是否到达了2的倍数,是的话,换行
				if(count % 2 == 0){
    
    
					System.out.println("\n");
				}
			}
		}
	}
}
  • 本题要点:
    • 今后如果需求带有统计xxx,请先想到计数器变量
    • 计数器变量定义的位置,必须在循环外部

while循环

基础知识

while循环是最基础的循环结构。

基本格式

while(条件判断语句) {
    
    
    语句体;
}

完整格式

初始化语句;
while(条件判断语句) {
    
    
    语句体;
    条件控制语句;
}

执行流程:

  1. 执行初始化语句。

  2. 执行条件判断语句。

  3. 判断条件判断语句是true还是false;

    如果是true,继续执行。

    ​ 如果是false,结束循环。

  4. 执行条件控制语句。

  5. 返回②,继续依次往下执行。

    示例代码:

public class Demo {
    
    
    public static void main(String[] args) {
    
    
        //需求:在控制台输出5次"HelloWorld"
		int i = 1;
		while(i<=5) {
    
    
			System.out.println("HelloWorld");
			i++;
		}
    }
}
案例-珠穆朗玛峰
  • 需求:世界最高山峰是珠穆朗玛峰(8844.43米=8844430毫米),假如我有一张足够大的纸,它的厚度是0.1毫米。请问,我折叠多少次,可以折成珠穆朗玛峰的高度?
  • 示例代码:
public class WhileTest {
    
    
    public static void main(String[] args) {
    
    
		//定义一个计数器,初始值为0
		int count = 0;
		//定义纸张厚度
		double paper = 0.1;
		//定义珠穆朗玛峰的高度
		int zf = 8844430;
		//因为要反复折叠,所以要使用循环,但是不知道折叠多少次,这种情况下更适合使用while循环
		//折叠的过程中当纸张厚度大于珠峰就停止了,因此继续执行的要求是纸张厚度小于珠峰高度
		while(paper <= zf) {
    
    
			//循环的执行过程中每次纸张折叠,纸张的厚度要加倍
			paper *= 2;
			//在循环中执行累加,对应折叠了多少次
			count++;
		}
		//打印计数器的值
		System.out.println("需要折叠:" + count + "次");
    }
}

循环细节

do…while循环

对于while而言,如果不满足条件,那么就不能进入循环。有的时候,我们需要即使不满足条件也要循环一次。

do…while循环和while循环很相似,唯一的区别是do…while循环至少执行一次。

基本格式

do{
    
    
    语句体;
}while(条件判断语句);

完整格式

初始化语句;
do{
    
    
    语句体;
    条件控制语句;
}while(条件判断语句);

执行流程:

  1. 执行初始化语句。

  2. 执行循环语句体。

  3. 执行条件控制语句。

  4. 执行条件判断语句。

    如果为true,继续执行。

    如果为false,结束循环。

  5. 回到②,继续执行。

三种循环的区别

  • 三种循环的区别
    • for循环和while循环先判断条件是否成立,然后决定是否执行循环体(先判断后执行)
    • do…while循环先执行一次循环体,然后判断条件是否成立,是否继续执行循环体(先执行后判断)
  • for循环和while的区别
    • 条件控制语句所控制的自增变量,因为归属for循环的语法结构中,在for循环结束后,就不能再次被访问到了
    • 条件控制语句所控制的自增变量,对于while循环来说不归属其语法结构中,在while循环结束后,该变量还可以继续使用

应用场景:

知道循环次数,建议使用for循环

不知道循环次数,建议使用while循环

至少执行一次,建议使用do…while循环,不常用

死循环(无限循环)

第一种格式:

for(;;) {
    
    
    语句体;
}

第二种格式:

while(true) {
    
    
	语句体;
}

第三种格式:

do{
    
    
	语句体;
}while(true);

跳转控制语句循环嵌套

  • break:用在循环中,基于条件控制,终止循环体内容的执行,也就是说结束当前的整个循环。
  • continue:用在循环中,基于条件控制,跳出循环体内容的执行,继续执行下一次。

注意事项

1.break可以在循环或者switch中进行使用,而continue只能是循环中使用。
2.break和continue只能跳出、跳过当前所在的那一层关系,如果想跳出、跳过指定的一层可以加入标号。

标号名.while(true) {
    
    
    switch(表达式) {
    
    
        case 常量值:
            break 标号名;
        ...
    }
}

循环标号

break和continue只能跳出、跳过自己所在的那一层关系,如果想要跳出、跳过指定的某一层循环就可以加入标号。

标号名:while(true) {
    
    
    switch(关系表达式) {
    
    
        case 1:
            break 标号名;
    }
}

Random

Random产生随机数

  • 概述:

    • Random类似Scanner,也是Java提供好的API,内部提供了产生随机数的功能
      • API后续课程详细讲解,现在可以简单理解为Java已经写好的代码
  • 使用步骤:

    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 Demo1Random {
    
    
	/*
		Random : 产生随机数
		
		1. 导包	: import java.util.Random;
				    导包的动作必须出现在类定义的上面

		2. 创建对象 : Random r = new Random();
					上面这个格式里面,r 是变量名,可以变,其他的都不允许变

		3. 获取随机数 : int number = r.nextInt(10);	//获取数据的范围:[0,10) 包括0,不包括10
					上面这个格式里面,number是变量名,可以变,数字10可以变。其他的都不允许变
		
		需求: 产生随机数1-10之间的
	*/
	public static void main(String[] args){
    
    
		// 2. 创建对象
		Random r = new Random();
		
		for(int i = 1; i <= 10; i++){
    
    
			// 3. 获取随机数
			int num = r.nextInt(10) + 1;		// 1-10
			System.out.println(num);
		}
		
		
		
	}
}

Random练习-猜数字

  • 需求:

    程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少?

    当猜错的时候根据不同情况给出相应的提示

    A. 如果猜的数字比真实数字大,提示你猜的数据大了

    B. 如果猜的数字比真实数字小,提示你猜的数据小了

    C. 如果猜的数字与真实数字相等,提示恭喜你猜中了

  • 示例代码:

import java.util.Scanner;
import java.util.Random;

public class Test {
    
    
	/*
		需求:程序自动生成一个1-100之间的数字,使用程序实现猜出这个数字是多少?
			当猜错的时候根据不同情况给出相应的提示
			如果猜的数字比真实数字大,提示你猜的数据大了
			如果猜的数字比真实数字小,提示你猜的数据小了
			如果猜的数字与真实数字相等,提示恭喜你猜中了
		
		1. 准备Random和Scanner对象, 分别用于产生随机数和键盘录入
		2. 使用Random产生一个1-100之间的数, 作为要猜的数
		3. 键盘录入用户猜的的数据
		4. 使用录入的数据(用户猜的数据)和随机数(要猜的数据)进行比较, 并给出提示
		
		5. 以上内容需要多次进行, 但无法预估用户输入几次可以猜测正确, 使用while(true)死循环包裹
		6. 猜对之后, break结束.

	*/
	public static void main(String[] args){
    
    
		// 1. 准备Random和Scanner对象, 分别用于产生随机数和键盘录入
		Random r = new Random();
		Scanner sc = new Scanner(System.in);
		// 2. 使用Random产生一个1-100之间的数, 作为要猜的数
		int randomNum = r.nextInt(100) + 1;
		
		// 5. 以上内容需要多次进行, 但无法预估用户输入几次可以猜测正确, 使用while(true)死循环包裹
		while(true){
    
    
			// 3. 键盘录入用户猜的的数据
			System.out.println("请输入您猜的数据:");
			int num = sc.nextInt();
			// 4. 使用录入的数据(用户猜的数据)和随机数(要猜的数据)进行比较, 并给出提示
			if(num > randomNum){
    
    
				System.out.println("猜大了");
			}else if(num < randomNum){
    
    
				System.out.println("猜小了");
			}else{
    
    
				// 6. 猜对之后, break结束.
				System.out.println("恭喜,猜中了");
				break;
			}
		}
		
		System.out.println("感谢您的使用");
		
	}
}

猜你喜欢

转载自blog.csdn.net/Sunshine_Mr_Sun/article/details/107740527