【03】JAVASE-分支语句【从零开始学JAVA】

Java零基础系列课程-JavaSE基础篇

Lecture:波哥

在这里插入图片描述

  Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。

三、分支语句

1. Scanner类

​ 之前我们书写的程序,数据都是固定不变得,也就是我们都是使用的常量,在实际的开发过程中,数据肯定是动态的而不是固定的,所以我们需要把固定的数据变更为键盘录入。通过Scanner模拟实际情况。

1.1 package

​ 为了便于管理我们的Java文件,我们可以通过创建package的方式来处理,package其实就是文件夹

在这里插入图片描述

在这里插入图片描述

1.2 class

  我们可以选择对应的package下创建 Java Class,也可以在创建JavaClass的同时去指定package

在这里插入图片描述

1.3 main

​ 在IDEA中,主方法可以在创建类的时候在菜单中勾选,也可以在创建好的Java文件手动敲,也可以通过 main 关键字快速生成

/**
 * 通用快捷键和设置
 * psvm:快速创建main方法
 * main:也可以快速创建main方法
 * sout:可以快速的生成 输出语句
 * "xxx".sout:可以快速生成输出语句和内容
 * 变量.soutv:可以快速生成输出语句和变量=值的格式
 */
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("HelloWorld");
        String name = "张三";
        System.out.println("name = " + name);
    }
}

1.4 导包

​ 在Java项目中,默认会引入java.lang.*下面的所有的类型,我们在使用lang包下的所有类型都不用导包,但是当我们要使用其他包下的类型的时候我们就需要通过import关键字来实现包的引入,同意可以通过alt + /方式快捷导入 也可以通过ctrl + 1(感叹号1)

在这里插入图片描述

package com.bobo.scanner;

import java.util.Scanner;

/**
 * Scanner案例 键盘输入案例
 * 在Java中会自动导入 java.lang.* 
 * @author dpb
 *
 */
public class ScannerDemo {

    public static void main(String[] args) {
        // 1.获取一个Scanner 对象
        Scanner input = new Scanner(System.in);
        System.out.println("请输入姓名:");
        String name = input.next(); // 阻塞 等待用户输入姓名
        System.out.println("name = " + name);
        System.out.println("请输入年龄:");
        int age = input.nextInt();// 阻塞等待用户输入年龄
        System.out.println("age = " + age);
    }
}

如果接受的类型和实际键盘录入的类型不一致会出现如下的错误

在这里插入图片描述

2. Java中的语句结构

​ Java中我们执行main方法中的代码的时候是有执行的先后顺序的,之前所写的代码都从上往下一行行执行了,没有遗落,除非报错,这种执行顺序我们叫顺序结构,最简单的结构。

在这里插入图片描述

2.1 顺序结构

​ 程序从上到下一行一行的执行代码,没有判断和中转,写在前面的代码先执行,写在后面的代码后执行

2.2 分支结构

​ 分支结构又称为选择结构,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程,在这个结构中代码有可能执行一次,也有可能一次也不执行,在Java中分支结构的具体实现有if语句switch语句

if语句

switch语句

2.3 循环结构

​ 在满足循环条件的情况下,反复执行特定的代码,特定的代码有可能一次也不执行,也有可能执行了很多遍

for循环

while循环

do while 循环

3. 分支语句

3.1 if语句

​ 为什么要用分支结构?

如果小明考试成绩大于90分,周末去海底世界游玩,这样的场景我们应该怎么来实现?

3.1.1 单if语句

语法结构

if ( 关系表达式 ) {

​ // 语句体

}

针对语法结构的说明:

  1. 表达式的类型必须是boolean类型,不能是其他类型
  2. 如果if语句下面只有一行代码,那么大括号可以省略,但是不推荐省略

执行的流程:

  1. 首先判断if语句的表达式的结果是true还是false
  2. 如果是true那么执行语句体
  3. 如果是false不执行语句体

在这里插入图片描述

案例:

package com.bobo.ifdemo;

import java.util.Scanner;

public class IfDemo01 {
	
	/**
	 * if语句
	 *    需求:如果小明考试成绩大于90分,周末去海底世界游玩,
	 *         这样的场景我们应该怎么来实现?
	 * @param args
	 */
	public static void main(String[] args) {
		// 获取一个Scanner对象
		Scanner in = new Scanner(System.in);
		System.out.println("请输入小明的考试成绩: " );
		int score = in.nextInt();
		if (score > 90) {
			System.out.println("周末去海底世界游玩....");
		}
		System.out.println("-------------------");
	}

}

面试题:

int i = 99;
if ( i > 100); {
    System.out.println("HelloWorld");
}

这段程序有没有问题?如果有问题什么原因?如果没有问题那么输出的结果是什么?

public static void main(String[] args) {
    int i = 99;
    if ( i > 100)

        ; // 这是一行代码
    // 这是一个代码块
    {
        System.out.println("HelloWorld");
    }
}

不会报错,输出的结果是 HelloWorld

课堂练习

张三Java成绩大于98分,而且音乐成绩大于80分,老师给他奖励,或者 Java成绩大于等于100分,音乐成绩大于70分,老师也可以给奖励

package com.bobo.ifdemo;

import java.util.Scanner;

public class ifdemo03 {

	/**
	 * 张三Java成绩大于98分,而且音乐成绩大于80分,老师给他奖励,
	 * 或者 Java成绩大于等于100分,音乐成绩大于70分,老师也可以给奖励
	 * @param args
	 */
	public static void main(String[] args) {
		
		// 获取 Scanner对象
		Scanner in = new Scanner(System.in);
		System.out.println("请输入张三的Java成绩:");
		int javaScore = in.nextInt();
		System.out.println("请输入张三的音乐成绩:");
		int music = in.nextInt();
		// 表达式可以很简单也可以很复杂,但是最终要求的结果的类型必须是boolean  
		// 复杂的表达式 最好通过() 括起来增强可读性
		if(  ( javaScore > 98 && music > 80 )
			|| (javaScore >= 100 && music > 70)	
			) {
			System.out.println("奖励一个苹果");
		}
		System.out.println("*************");
	}

}

3.1.2 if-else语句

如果小明考试成绩大于90分,周末去海底世界游玩,否则在家打扫卫生。这样的场景我们应该怎么来实现?

if-else语句的语法格式:

if(条件表达式){

​ // 代码块1

}else{

​ // 代码块2

}

执行顺序:

  1. 判断条件表达式的结果,true或者false
  2. 如果结果是true就执行代码块1
  3. 否则执行代码块2

案例:

package com.bobo.ifdemo;

import java.util.Scanner;

public class IfDemo04 {

	/**
	 * 如果小明考试成绩大于90分,周末去海底世界游玩,否则在家打扫卫生。
	 * @param args
	 */
	public static void main(String[] args) {
		// 获取一个Scanner对象 shift+Tab
		Scanner in = new Scanner(System.in);
		System.out.println("请输入小明的考试成绩: " );
		int score = in.nextInt();
		/*if (score > 90) {
			System.out.println("周末去海底世界游玩..");
		}
		
		if (score <= 90) {
			System.out.println("周末在家打扫卫生...");
		}*/
		
		if (score > 90) {
			System.out.println("周末去海底世界游玩..");
		}else{
			System.out.println("周末在家打扫卫生...");
		}
		// 三目运算符适合比较简单的场景
		String prize = score > 90 ? "周末去海底世界游玩.." : "周末在家打扫卫生...";
		
		System.out.println("*********" + prize);
	}

}

课堂练习:

  1. 如果体彩中了500万,我买车、资助希望工程、去欧洲旅游
    如果没中,我买下一期体彩,继续烧高香
  2. 输入四位数字的会员号的百位数字等于产生的随机数字即为幸运会员,提示恭喜您中奖了,否则没中奖

提示:生成随机数的方法 int random = (int)(Math.random()*10);

package com.bobo.ifdemo;

import java.util.Scanner;

public class IfDemo05 {

	/**
	 * 输入四位数字的会员号的百位数字等于产生的随机数字即为幸运会员,
	 * 提示恭喜您中奖了,否则没中奖
	 * Math.random();  获取一个0~1.0 不包含1.0的小树
	 * 5678
	 * 8  5678%10
	 * 7  5678/10%10  5678%100/10
	 * 6  5678/100%10  5678%1000/100
	 * @param args
	 */
	public static void main(String[] args) {
		// 生成一个个位数的随机值
		// System.out.println(Math.random()); 
		int random = (int)(Math.random()*10);
		System.out.println("random:" + random);
		Scanner in = new Scanner(System.in);
		System.out.println("请输入一个四位数的整数:");
		int code = in.nextInt();
		if(code >= 1000 && code <= 9999){
			// 1000 < code < 9999  5678
			int i = code/100%10; //5678/100%10
			if(i==random){
				System.out.println(random + " 恭喜您成为幸运的会员");
			}
		}else{
			System.out.println("请输入合法的数字...");
		}

		/*System.out.println(5678%10);
		System.out.println(5678/10%10);
		System.out.println(5678%100/10);*/
	}

}
3.1.3 多重if-else语句

有这样一个场景:

​ 老师在批改试卷,成绩在90分以上的为优秀,成绩在80-90分之间为良好,成绩在60-80分之间的为合格,60分以下的为差,这个应该要怎么来实现?

多重if-else语句语法:

if (条件1) {
    // 代码1
}else if(条件2){
    // 代码2
}else if(条件3){
    // 代码3
}...{
    
}else{
    // 代码N
}

执行顺序:

  1. 判断条件1,结果为true或者false

  2. 如果为true,直接执行代码1,然后结束

  3. 如果为false,那么看条件2是否为true

  4. 如果为true,直接执行代码2

  5. 否则判断条件3以此类推,如果所有的 else - if语句都返回的是false,那么执行else中的代码

注意:

  1. else if 可以有0到多个
  2. else语句最多只能有一个

案例:

package com.bobo.ifdemo;

import java.util.Scanner;

public class IfDemo06 {

	/**
	 * 老师在批改试卷,成绩在90分以上的为优秀,
	 * 成绩在80-90分之间为良好,
	 * 成绩在60-80分之间的为合格,
	 * 60分以下的为差,
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		System.out.println("请输入考试成绩:" );
		int score = in.nextInt();
		String info = "";
		if (score >= 90) {
			info = "成绩优秀";
		}else if(score >=80 ){
			info = "成绩良好,继续加油";
		}else if (score >= 60) {
			info = "成绩刚好及格,努力加油";
		}else {
			info = "成绩很差,明天叫家长过来....";
		}
		System.out.println(info);

	}

}

课堂练习:

键盘输入一个月份值,然后输出对应的季节

package com.bobo.ifdemo;

import java.util.Scanner;

public class IfDemo07 {

	/**
	 * 键盘输入一个月份值,然后输出对应的季节
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		System.out.println("请输入一个月份");
		int month = in.nextInt();
		if(month >= 1 && month <= 12){
			if( month <= 3){
				// 表示是春季
				System.out.println(month + "月份对应的是春季");
			}else if(month <= 6){
				System.out.println(month + "月份对应的是夏季");
			}else if(month <= 9){
				System.out.println(month + "月份对应的是秋季");
			}else{
				System.out.println(month + "月份对应的是冬季");
			}
		}else{
			System.out.println("请输入一个合法的月份...");
		}

	}

}

3.1.4 嵌套if语句

语法结构:

if(条件1){
    if(条件2){
        // 代码1
    }else{
        // 代码2
    }
}else{
    //  代码3
}

执行流程:

  1. 首先判断条件1是否为true
  2. 为true再判断条件2是否为true,
  3. 条件如果为true执行代码1,否则执行代码2
  4. 条件1为false,则执行代码3

3.2 switch语句

3.2.1 switch语句介绍

switch语句是根据表示的不同的值做出不同的执行的,针对特定的值来出来

语法格式:

switch(表达式){
    case1:
        代码1;
        break;
    case2:
        代码2:
        break;
    ....N 
        
     default:
        默认语句;
        break;
}

注意:

  1. 表达式的值得类型必须是如下几种(int shor byte char String) String是jkd7之后支持的

  2. case子句中的取值必须是常量,且所有case子句中的取值是不同的

  3. case子句中农的取值数据类型必须是表达式返回值得类型

  4. default子句是可选的,同时default块顺序可以变动,但要注意执行顺序,通常default块放在末尾,也可以省略

  5. break语句的作用是在执行完一个case分支后是程序跳出switch语句块

案例:

package com.bobo.switchdemo;

import java.util.Scanner;

public class SwitchDemo01 {

	/**
	 * 模拟:拨打中国电信客户的案例
	 * 按1:办理快带业务
	 * 按2:办理手机业务
	 * 按3:办理投诉业务
	 * 按4:转人工服务
	 * 没有上面的选项: 对不起您的输入有误
	 * @param args
	 */
	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		System.out.println("请输入您服务编号:");
		int num = in.nextInt();
		switch (num) {
			case 1:
				System.out.println("办理快带业务");
				break;
			case 2:
				System.out.println("办理手机业务");
				break;
			case 3:
				System.out.println("办理投诉业务");
				break;
			case 4:
				System.out.println("转人工服务");
				break;
			default:
				System.out.println("对不起您的输入有误");
				break;
		}

	}

}

3.2.2 switch和if对比

if语句

  1. 表达式的结果是boolean类型
  2. 常用于区间的判断

switch语句

  1. 表达式的类型不能是boolean类型,可以是 byte,short,int,char和String 枚举类型
  2. 常用于等值判断

选择语句的选取

  1. 能switch语句实现的就一定能够有if语句实现,但是反之就不一定了
  2. 如果是区间范围的采用if语句,如果是等值判断的使用switch语句
3.2.3 经典switch面试题
  1. 若a和b均是整型变量并已正确赋值,正确的switch语句是( )。
    A) switch(a+b); { … } B) switch( a+b*3.0 ) { … }
    C) switch a { … } D) switch ( a%b ) { … }

  2. 设int 型变量 a、b,float 型变量 x、y,char 型变量 ch 均已正确定义并赋值,正确的switch语句是( )。
    A) switch (x + y) { … } B) switch ( ch + 1 ) { … }
    C) switch ch { … } D) switch ( a + b ); { … }

  3. 下列语句序列执行后,k 的值是( )。

    int x = 6, y = 10, k = 5;
    switch (x % y) {
         case 0:
               k = x * y;
         case 6:
               k = x / y;
          case 12:
               k = x - y;
           default:
               k = x * y - x;
    }
    

    A) 60 B) 5 C) 0 D) 54

  4. 下列语句序列执行后,k 的值是( )。

    int i = 10, j = 18, k = 30;
    switch (j - i) {
          case 8:
             k++;
          case 9:
             k += 2;
          case 10:
             k += 3;
          default:
             k /= j;
    }
    

    A) 31 B) 32 C) 2 D) 33

  5. 下列语句序列执行后,r 的值是( )

    char ch = '8';
    int r = 10;
    switch (ch + 1) {
          case '7':
             r = r + 3;
          case '8':
             r = r + 5;
          case '9':
             r = r + 6;
             break;
           default:
             r = r + 8;
    }
    

    A) 13 B) 15 C) 16 D) 18

  6. 下面语句运行结果为:()

    switch (5) {
        default:
            System.out.println(5);
            break;
        case 0:
        	System.out.println(0);
       	 	break;
        case 1:
        	System.out.println(1);
        	break;
       	case 2:
       		 System.out.println(2);
        	 break;
    }
    

    A) 0 B) 1 C) 2 D) 5

  7. 下面语句运行结果为:()

    switch (5) {
        default:
        	System.out.print(5);
        case 0:
        	System.out.print(0);
        case 1:
       	 	System.out.print(1);
        	break;
        case 2:
        	System.out.print(2);
        	break;
    }
    

    A) 1 B) 5 C) 0 D) 501

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/579084.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Redis 服务等过期策略和内存淘汰策略解析

redis服务是基于内存运行的&#xff0c;所以很多数据都存放在内存中&#xff0c;但是内存又不是无限的&#xff0c;所以redis就引出了key的过期和淘汰策略。 一、Redis的过期策略&#xff1a; 我们在set key的时候&#xff0c;可以给它设置一个过期时间&#xff0c;比如expire …

Autosar MCAL-RH850P1HC Fls配置

文章目录 FlsFlsGeneralFlsAcLoadOnJobStartFlsBaseAddressFlsBlankCheckApiFlsCancelApiFlsCompareApiFlsCopySupportedFlsCriticalSectionProtectionFlsDevErrorDetectFlsDeviceNameFlsDriverIndexFlsFaciEccCheckFlsGetJobResultApiFlsGetStatusApiFlsLoopCountFlsReadImmed…

(待更)DRF: 序列化器、View、APIView、GenericAPIView、Mixin、ViewSet、ModelViewSet的源码解析

前言&#xff1a;还没有整理&#xff0c;后续有时间再整理&#xff0c;目前只是个人思路&#xff0c;文章较乱。 注意路径匹配的“/” 我们的url里面加了“/”&#xff0c;但是用apifox等非浏览器的工具发起请求时没有加“/”&#xff0c;而且还不是get请求&#xff0c;那么这…

大语言模型在研究领域的应用——信息检索中的大语言模型

信息检索中的大语言模型 大语言模型提升信息检索任务利用大语言模型进行信息检索大语言模型增强的信息检索模型. 检索增强的大语言模型输入优化策略.指令微调策略.预训练策略. 总结应用建议未来方向 大语言模型对于传统信息检索技术与应用范式带来了重要影响。这两者在技术路径…

【加密周报】中美下周有“大事”发生!准备联手引爆比特币大行情?美国大型养老基金和梅隆银行已持有比特币ETF!

自减半之后&#xff0c;比特币便进入了横盘状态&#xff0c;始终在6-6.5万美元价格区间震荡。4月24日&#xff0c;香港证监会官网正式公示虚拟资产现货ETF获批名单&#xff0c;华夏&#xff08;香港&#xff09;、嘉实国际、博时国际旗下相关产品均在其列&#xff0c;并计划将于…

K8s 使用 Ceph RBD 作为后端存储(静态供给、动态供给)

一、K8s 使用 Ceph RBD Ceph RBD&#xff08;Rados Block Device&#xff09;是 Ceph 存储集群中的一个重要组件&#xff0c;它提供了块级别的存储访问。RBD 允许用户创建虚拟块设备&#xff0c;并将其映射到客户端系统中&#xff0c;就像本地磁盘一样使用。 首先所有 k8s 节…

【算法学习】线段树基础版

一 线段树 1.概念 线段树可以理解为一个二叉树&#xff0c;如果是利用线段树求区间的和&#xff0c;那么每个结点的权值维护的是结点所维护区间的和&#xff0c;再将该区间一分为二&#xff0c;分别交由左右儿子维护。 拿区间1 - 4的和来举例子&#xff0c; 根结点维护的是区…

嵌入式Linux学习——Ubantu初体验

Ubuntu 和Windows 的最大差别 Windows中的每一个分区都对应着一个盘符&#xff0c;盘符下可以存放目录与文件&#xff0c;而在Ubantu中没有盘符的概念&#xff0c;只有目录结构。实际上不同的目录可能挂载在不同的分区之下&#xff0c;如果想要查看当前目录位于磁盘的哪个分区…

IDEA:运行 Tomcat 报错 “1099”

1、报错的结果 报错 就很明显啊 localhost:1099 端口号被使用了 2、报错原因 tomcat的端口已经被使用&#xff0c;与运行的起了冲突。强制结束项目&#xff0c;但端口号没有被释放短时间内频繁运行tomcat服务器。 3、解决方法 win R 输入 cmd 打开命令框 黑窗口输…

个人学习-前端相关(2):ECMAScript 6-箭头函数、rest、spread

ES6的箭头函数 ES6允许使用箭头函数&#xff0c;语法类似java中的lambda表达式 let fun1 function(){} //普通的函数声明 let fun2 ()>{} //箭头函数声明 let fun3 (x) >{return x1} let fun4 x >{return x1} //参数列表中有且只有一个参数&#xff0c;()可…

纯血鸿蒙APP实战开发——预渲染实现Web页面瞬开效果

介绍 为了便于大家在使用本案例集时能够更详细的了解各个案例&#xff0c;本案例基于Web预渲染实现了案例介绍功能&#xff0c;即应用右下角的问号icon。 效果图预览 使用说明 因为直接加载的线上README&#xff0c;因此本功能需联网使用点击icon&#xff0c;即会弹出对应案…

Docker容器部署overleaf

overleaf在线版限制很多&#xff0c;好在开源&#xff0c;准备在本地Docker部署&#xff0c;网上翻了翻&#xff0c;似乎本地部署并非易事&#xff0c;我也尝试了一下&#xff0c;发现直接使用docker-compose拉官方最新镜像部署的确问题很多&#xff0c;不过最终还是完美解决。…

如何借模板助力小程序开发

不论是奶茶店还是其他行业&#xff0c;想要开发小程序&#xff0c;乔拓云都为你提供了便捷的方案。无需复杂的编程技术&#xff0c;通过套用模板的方式&#xff0c;即可快速打造专属小程序。 在线访问乔拓云官方网站&#xff0c;免费注册账号后&#xff0c;即可进入商城小程序的…

C语言学习/复习36

一、程序的环境与预处理 二、翻译环境与执行环境 三、运行环境 四、预编译(预处理)详解

Docker从无到有

主要为windows下docker的安装与使用~ 初始Docker Docker理解 对于docker的加简介&#xff0c;我们可以官网获取它的概念&#xff0c;接下来就从什么是docker、为什么要使用docker以及它的作用来进行一个快速入门 前提&#xff1a;项目在发布时&#xff0c;不仅需要其jar包同…

Open-Sora 升级技术报告解读

最新功能概览 开源地址&#xff1a;https://github.com/hpcaitech/Open-Sora 技术报告&#xff1a;Open-Sora/docs/report_02.md at main hpcaitech/Open-Sora GitHub技术报告&#xff1a; 支持长视频生成&#xff1b;视频生成分辨率最高可达 720p&#xff1b;单模型支持任…

SOL跟单机器人是什么?

SOL跟单机器人是什么&#xff1f; 顾名思义&#xff0c;就是对方买什么我们买什么。。 solana跟单机器人&#xff0c;炒土狗新思路 跟聪明地址买入及卖出 1.跟随目标地址买入代币&#xff0c;比目标地址慢1-2秒内上链 2.上链稳定&#xff0c;采用jito路径&#xff0c;防止被夹 …

【视频打架行为数据集】打斗场景视频数据集简要介绍

一、UBI-Fight&#xff08;异常事件检测数据集&#xff09; 介绍 UBI-Fights 数据集是一个独特的全新大型数据集&#xff0c;涉及特定的异常检测并仍然在打斗场景中提供广泛的多样性&#xff0c;该数据集包含 80 小时的视频&#xff0c;在帧级别进行了完全注释。由 1000 个视…

三款数据可视化工具深度解析:Tableau、ECharts与山海鲸可视化

在数字化时代&#xff0c;数据可视化工具成为了企业和个人进行数据分析和决策的重要助手。市面上众多数据可视化工具各具特色&#xff0c;本文将为您介绍三款热门的数据可视化工具&#xff0c;帮助您更好地理解和利用数据。 首先&#xff0c;让我们来认识Tableau。Tableau是一款…

opencv4.8 系列一环境搭搭建

open 运行环境&#xff1a; vs2017 下载地址&#xff1a;https://www.123pan.com/s/cVyRVv-ydPWh.html 一&#xff1a;新建项目 二&#xff1a;核心代码&#xff1a; 在这里插入代码片 #include<opencv2/opencv.hpp>int main(int argc,char** argv) {cv::Mat src cv…