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 ( 关系表达式 ) {
// 语句体
}
针对语法结构的说明:
- 表达式的类型必须是boolean类型,不能是其他类型
- 如果if语句下面只有一行代码,那么大括号可以省略,但是不推荐省略
执行的流程:
- 首先判断if语句的表达式的结果是true还是false
- 如果是true那么执行语句体
- 如果是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
}
执行顺序:
- 判断条件表达式的结果,true或者false
- 如果结果是true就执行代码块1
- 否则执行代码块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);
}
}
课堂练习:
- 如果体彩中了500万,我买车、资助希望工程、去欧洲旅游
如果没中,我买下一期体彩,继续烧高香 - 输入四位数字的会员号的百位数字等于产生的随机数字即为幸运会员,提示恭喜您中奖了,否则没中奖
提示:生成随机数的方法 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,结果为true或者false
-
如果为true,直接执行代码1,然后结束
-
如果为false,那么看条件2是否为true
-
如果为true,直接执行代码2
-
否则判断条件3以此类推,如果所有的 else - if语句都返回的是false,那么执行else中的代码
注意:
- else if 可以有0到多个
- 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是否为true
- 为true再判断条件2是否为true,
- 条件如果为true执行代码1,否则执行代码2
- 条件1为false,则执行代码3
3.2 switch语句
3.2.1 switch语句介绍
switch语句是根据表示的不同的值做出不同的执行的,针对特定的值来出来
语法格式:
switch(表达式){
case 值1:
代码1;
break;
case 值2:
代码2:
break;
....N
default:
默认语句;
break;
}
注意:
-
表达式的值得类型必须是如下几种(int shor byte char String) String是jkd7之后支持的
-
case子句中的取值必须是常量,且所有case子句中的取值是不同的
-
case子句中农的取值数据类型必须是表达式返回值得类型
-
default子句是可选的,同时default块顺序可以变动,但要注意执行顺序,通常default块放在末尾,也可以省略
-
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语句
- 表达式的结果是boolean类型
- 常用于区间的判断
switch语句
- 表达式的类型不能是boolean类型,可以是 byte,short,int,char和String 枚举类型
- 常用于等值判断
选择语句的选取
- 能switch语句实现的就一定能够有if语句实现,但是反之就不一定了
- 如果是区间范围的采用if语句,如果是等值判断的使用switch语句
3.2.3 经典switch面试题
-
若a和b均是整型变量并已正确赋值,正确的switch语句是( )。
A) switch(a+b); { … } B) switch( a+b*3.0 ) { … }
C) switch a { … } D) switch ( a%b ) { … } -
设int 型变量 a、b,float 型变量 x、y,char 型变量 ch 均已正确定义并赋值,正确的switch语句是( )。
A) switch (x + y) { … } B) switch ( ch + 1 ) { … }
C) switch ch { … } D) switch ( a + b ); { … } -
下列语句序列执行后,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
-
下列语句序列执行后,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
-
下列语句序列执行后,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
-
下面语句运行结果为:()
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
-
下面语句运行结果为:()
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