首页 > 编程语言 >Java学习笔记——第三天

Java学习笔记——第三天

时间:2024-03-02 22:45:05浏览次数:42  
标签:语句 case Java 代码 第三天 笔记 while 循环 执行

流程控制

程序中最经典的三种执行顺序

  • 顺序结构:自上而下地执行代码,最普通的执行顺序。
  • 分支结构:根据条件,选择对应代码执行。
  • 循环结构:控制某段代码重复执行。

分支结构

if分支

if分支的作用

根据条件(真或假)来决定执不执行某段代码或执行哪段代码。

if分支应用场景

需要根据不同输入选择不同输出或做出不同处理时。

if分支的三种格式

  1. if (条件表达式) {
        代码块;
    }
    
    
  2. if (条件表达式) {
        代码块1;
    } else {
    	代码块2;
    }
    
    
  3. if (条件表达式1) {
        代码块1;
    } else if (条件表达式2) {
    	代码块2;
    } else if (条件表达式3) {
    	代码块3;
    }
    ...
    else {
    	代码块n;
    }
    
    
  • if 语句中,如果大括号控制的只有一行代码,则大括号可以省略不写。

if分支的执行流程

格式1:首先判断条件表达式的结果,如果为true执行代码块,为 false 就不执行代码块。

格式2:首先判断条件表达式的结果,如果为true执行代码块1,为 false 就执行代码块2。

格式3:

  1. 先判断条件表达式1的值,如果为true则执行代码块1,分支结束;如果为false则判断条件表达式2的值。
  2. 如果值为true就执行代码块2,分支结束;如果为false则判断条件表达式3的值。
  3. ...
  4. 如果没有任何条件为true,就执行else分支的代码块n。

switch分支

switch分支的作用

通过比较值来决定执行哪条分支。

switch分支的格式

switch (表达式) {
	case 值1:
		执行代码1;
		break;
	case 值2:
		执行代码2;
		break;
   	…
    case 值n-1:
    	执行代码n-1;
    	break;
    default:
    	执行代码n;
}

  • 表达式类型只能是byte、short、int或char,JDK5开始支持枚举,JDK7开始支持String,不支持double、float和long。
  • case后的值不允许重复,且必须是字面量,不能是变量。
  • 正常使用switch的时候,不要忘记写break,否则会出现穿透现象。

switch分支的执行流程

  1. 先执行表达式的值,再拿着这个值去与case后的值进行匹配。
  2. 与哪个case后的值匹配为true就执行哪个case块的代码,遇到break就跳出switch分支。
  3. 如果全部case后的值与之匹配都是false,则执行default块的代码。

switch的穿透性

  • 若在某个case后没有加上break的话,程序就会一直向下运行,进入其他case中,直到遇到break或一直运行到switch末尾。
  • 当存在多个case分支的代码相同时,可以把相同的代码放到一个case块中,其他的case块都通过穿透性穿透到该case块执行代码即可,这样可以简化代码。

if和switch的比较

  • if在功能上远远强大于switch。
  • 当前条件是区间的时候,应该使用if分支结构。
  • 当条件是与一个一个的值比较的时候,switch分支更合适:格式良好,性能较好,代码优雅。

循环结构

循环结构的作用

控制一段代码重复执行多次。

for循环

for循环的格式

for (初始化语句; 循环条件; 迭代语句) {
    循环体语句(重复执行的代码);
}

for循环的应用场景

  • 有大量重复执行的代码时,可以减少代码的重复编写,灵活地控制程序的执行。
  • 批量生产数据。

while循环

while循环的格式

初始化语句;
while (循环条件) {
    循环体语句(被重复执行的代码);
    迭代语句;
}

while循环的执行流程

  1. 循环一开始,执行初始化语句一次。
  2. 接着执行循环条件语句,若为true , 就进到循环体中执行,否则就结束循环。
  3. 在循环内部执行迭代语句,之后回到步骤2。

do-while循环

do-while循环的格式

初始化语句;
do {
    循环体语句;
    迭代语句;
} while (循环条件);

do-while循环的执行流程

  1. 循环一开始,执行初始化语句一次。
  2. 接着进到循环体中执行循环体语句和迭代语句。
  3. 接着执行循环条件语句,若为true , 就回到步骤2,否则就结束循环。

do-while循环的特点

先执行后循环。

三种循环的区别

  • for循环和while循环先判断后执行,do...while循环先执行后判断。
  • for循环和while循环的执行流程是一模一样的,功能上无区别,for能做的while也能做,反之亦然。
  • 使用规范:如果已知循环次数建议使用for循环,如果不清楚要循环多少次建议使用while循环。
  • for循环中,控制循环的变量只在循环中使用。while循环和do-while循环中,控制循环的变量在循环后还可以继续使用。
  • 某些先执行后判断的业务场景用do-while循环更好。

死循环

什么是死循环

可以一直执行下去的一种循环,如果没有干预不会停下来。

死循环的应用场景

服务器程序。

死循环的写法

//写法1
for (初始化语句; 循环条件; 迭代语句) {
    循环体语句;
}

// 写法2,经典写法
while (true) {
    循环体语句;
}

//写法3
do {
    循环体语句;
} while (true);

循环嵌套

什么是循环嵌套

循环中又包含循环。

循环嵌套的写法

for (int i = 0; i < 3; i++) {
    
     for (int j = 0; j < 5; j++) {
         System.out.println(1);
     }
}

// 三种循环结构可以互相多次嵌套

循环嵌套的特点

外部循环每循环一次,内部循环会全部执行完一轮。

跳转关键字:break,continue

break

  • 跳出并结束当前所在循环的执行,只跳出一层循环,或结束所在switch分支的执行。
  • 只能在循环或switch分支中使用。

continue

  • 用于跳出当前循环的当次执行,直接进入循环的下一次执行。
  • 只能在循环中进行使用。

Random的使用

Random的作用

生成随机数。

使用Random的步骤:

  1. 导包:

    import java.util.Random;
    
  2. 生成Random对象:

    Random r = new Random();
    
  3. 调用Random的方法获得目标区间随机整数:

    int number = r.nextInt(左区间, 右区间);
    
  • Random生成的随机数为括号内的左闭右开区间。

猜数字游戏

需求

随机生成一个1-100之间的数据,提示用户猜测,猜大提示过大,猜小提示过小,直到猜中结束游戏。

分析

  1. 先随机生成一个1-100之间的数据。
  2. 定义一个死循环让用户可以一直猜测。
  3. 在死循环里,每次都提示用户输入一个猜测的数字,猜大提示过大,猜小提示过小,猜中则结束游戏。

代码

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

public class HelloWorld {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        Random r = new Random();

        int numberTarget = r.nextInt(1, 101); // 获得随机的目标数字,范围为1~100

        // 死循环,使玩家重复猜数字
        while (true) {
            // 得到玩家猜的数字
            System.out.println("请输入你猜的数字:");
            int numberGuess = sc.nextInt();

            //核心逻辑
            if (numberGuess > numberTarget){
                System.out.println("猜大了");
            } else if (numberGuess < numberTarget) {
                System.out.println("猜小了");
            } else {
                System.out.println("猜对了");
                break; // 跳出循环,结束游戏
            }
        }
    }
}

标签:语句,case,Java,代码,第三天,笔记,while,循环,执行
From: https://www.cnblogs.com/zgg1h/p/18049402

相关文章

  • 李超线段树学习笔记
    前言如有错误,欢迎各位大佬指出。GM说学了斜率和线段树就可以尝试。前置芝士:斜率线段树1.什么是李超线段树?李超线段树主要解决平面坐标系内有关直线的问题,李超线段树是一种特殊的线段树。这里给出一个引例P4097[HEOI2013]Segment。题目大意及要维护两个操作:给......
  • 为什么要使用Java SPI机制
    JavaSPI(ServiceProviderInterface)最早是在JavaSE6中被引入的,作为一种标准的、用于在运行时发现和加载服务提供者插件的标准机制。以前的程序猿实现JDBC连接数据库都会自己写工具类加载不同厂商的驱动来实现数据库操作,但是随着JDBC4.0之后采用了JavaSPI机制,这部分工作就变的......
  • 随笔记录篇——C++iostream库 以及std
    这篇文章非原创,来自我学习过程中看到的其他博主发的一些资料,解决了我的疑问,在此进行整理。C语言的标准输入输出库是stdio.h库,是一个函数库,而不是类库。其中包含了我们其中所用的scanfpringf都是一些独立的全局函数,因为C语言是不支持类的。C++的标准输入输出库iostream是一个类......
  • Java流程控制
    Scanner对象Java提供了一个工具类,可以获取用户的输入。java.util.Scanner是Java5的新特征。基本语法:Scannerscanner=newScanner(System.in);使用后关闭:scanner.close();通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前一般需要使用hasNext()与hasNex......
  • 点分治学习笔记
    0.前言又称淀粉质。学科营之前赶紧来一波急抓。1.引入我们考虑这样一个问题,对于一棵树,我们求出树上所有路径长度小于等于\(k\)的路径总数。首先不难想到一种\(n^3\)的暴力做法,即枚举两个端点,然后暴力出路径。考虑找路径的时候优化一下,采用倍增或者树链剖分将复杂度变为......
  • 高级搜索算法学习笔记
    0.前言如有错误,欢迎各位大佬指出。前置芝士:深度优先搜索广度优先搜索1.何为高级搜索?在通常情况下,普通的深搜往往会超时,即使剪枝也无动于衷。对于广搜,我们一旦超时也很难进行优化。而这时,我们就需要对搜索的形态进行改变,将深搜和广搜进行升级,变形成为各种效率更高的高......
  • Java基础
    Java基础1、JVMvsJREvsJDK思路:可以从他们之间的关系回答,从小到大进行介绍它们之间的关系和不同,比如jvm<jre<jdk答案:JVM是运行Java字节码的虚拟机。JVM会根据不同的系统进行特定的设计(Windows、Linux、MacOS),目的是在不同的操作系统上使用相同的字节码可以得到相......
  • 基础笔记-时空复杂度分析
    C++一秒可以算1e7或者1e8的次数由数据范围反推算法复杂度以及算法内容-AcWing第七章时空复杂度分析笔记-AcWing  时间复杂度分析1.纯循环,看几层循环,就是几次方(有些循环不一定,比如双指针,i循环n次,j其实一共只会循环n次,所以复杂度是O(n))2.递归,看有递归了几层,计算每一层......
  • Java消息服务JMS
    一、JMS规范JMS是Java消息服务(JavaMessageService)应用程序接口的简写,是一个Java平台中关于面向消息中间件(MOM)的API,它为标准消息协议和消息服务提供了一组通用接口,包括创建、发送、读取消息等。用于在两个应用程序之间,或分布式系统中发送消息,进行异步通信。Java消息服务是一......
  • 《A Hierarchical Framework for Relation Extraction with Reinforcement Learning》
    代码原文地址摘要现有的大多数方法在确定关系类型之前,需要先识别出所有的实体,这样就忽略了实体提及和关系类型之间的交互。本文提出了一种新颖的联合抽取范式,把相关实体看作是关系的参数(首先检测一个关系,然后提取相应的实体作为关系的参数)。本文在这个范式下采用了一个分层......