JAVA中关于分支语句的学习与扩展
Scanner键盘录入对象和eclipse的一些简单操作:
一. 为什么需要键盘录入数据?
序列
之前我们书写程序时候,数据是固定不变的,但是在开发当中,数据肯定是动态的而不是固定的,所以我们需要把固定的数据更改为键盘录入。
如何使用Scanner键盘录入对象
1、导包
在class修饰的类名上面加入如下语句
import java.util.Scanner;
2、创建对象
Scanner input = new Scanner(System.in);
3、使用变量接收数据
int num = input.nextInt();
二. Scanner键盘录入对象。
// 1、键盘录入两个数,并将这两个数求和,求最大值,并输出
/*
1.导包
2.创建键盘输入对象
3.通过键盘输入给变量赋值
获取用户输入的类型:
nextInt(); 获取用户输入的整数
nextDouble(); 获取用户输入的小数
nextBoolean(); 获取用户输入的boolean值
nextLine(); 结果是String类型,获取用户输入的字符串
next(); 结果是String类型,获取用户输入的字符串
这些方法统称为阻塞方法
阻塞方法: 程序执行到这个方法的时候,会阻塞主线程,程序不会继续执行,知道用户输入结束,程序继续执行
java.util.InputMismatchException
异常名称: 输入的类型不匹配异常
产生原因: 用户输入的类型和接收的类型不一致
解决办法: 类型匹配即可
*/
// 1.导包
import java.util.Scanner;
public class ScannerDemo {
public static void main(String[] args) {
// 2.创建键盘输入对象
// Scanner input = new Scanner(System.in);
// 提示性语句
// System.out.print("请输入整数: ");
// 3.通过键盘输入给变量赋值
/*int i = input.nextInt();
System.out.println("你输入的整数是: " + i);
System.out.print("请输入小数: ");
double j = input.nextDouble();
System.out.println("你输入的小数是: " + j);
System.out.print("请输入boolean类型: ");
boolean k = input.nextBoolean();
System.out.println("你输入的boolean类型是: " + j);
System.out.print("请输入字符串类型: ");
String str = input.next();
System.out.println("你输入的字符串类型是: " + str);*/
// 1、键盘录入两个数,并将这两个数求和,求最大值,并输出
/*
1.导包
2.创建键盘输入对象
3.定义变量获取用户输入的第一个数
4.定义变量获取用户输入的第二个数
5.定义求和变量sum来计算两个数的和
6.定义最大值变量来计算两个数的最大值
7.输出和以及最大值
*/
// 2.创建键盘输入对象
Scanner input = new Scanner(System.in);
System.out.print("请输入第一个数: ");
// 3.定义变量获取用户输入的第一个数
int num1 = input.nextInt();
System.out.print("请输入第二个数: ");
// 4.定义变量获取用户输入的第二个数
int num2 = input.nextInt();
// 5.定义求和变量sum来计算两个数的和
int sum = num1 + num2;
// 6.定义最大值变量来计算两个数的最大值
int max = num1 > num2 ? num1: num2;
// 7.输出和以及最大值
System.out.println("两个数的和为: " + sum + ",两个数的最大值为: " + max);
}
}
例子:
/*
2、键盘录入两个数,并判断两个数是否相等 (不要使用if-else)
提高: 如果两个数相等,输出两个数相等,不相等就输出两个数不相等,同时输出两个数中较大的值
*/
import java.util.Scanner;
public class ScannerDemo02 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入第一个数: ");
int num1 = input.nextInt();
System.out.print("请输入第二个数: ");
int num2 = input.nextInt();
String result = (num1 == num2) ? "两个数相等": ("两个数不相等,并且两个数中最大值为: " + (num1 > num2? num1: num2));//三目运算
System.out.println(result);
}
}
三.在eclipse中的简单操作。
package com.sxt;
import java.util.Scanner;
/*
* Ctrl + - 放大缩小字体
* Ctrl + Shift + / 注释
* Ctrl + Shift + \ 反注释
* Ctrl + / 单行、反注释
* Ctrl + D 删除一行
*
* Alt + / 代码提示
* 设置自动提示 Windows - preferences - 输入 Content assistant
*
* 输出语句的三种格式
* syso: 普通输出
* syst: 测试输出
* syse: 错误输出
*
* 常用的快捷键
* 设置快捷键 Windows - preferences - 输入 keys
* Ctrl + 1 万能键 处理所有的警告和错误信息 【自动修复键】
* 移动一行 alt + 上下键
* Ctrl + Alt + Down 复制代码
*
* Ctrl + Shift + O 一键导包
*
* 其他和文本操作相关的快捷键
* 选中文本操作
* shift + 上下左右 home end pageup pgup pagedown pgdn
* 输入文本操作
* 上下左右 end home
* shift + enter 切换到下一行
* Ctrl + Shift + Enter 切换到上一行
*/
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello");
System.out.println("HelloWorld.main()");
System.err.println("Error");
Scanner input = new Scanner(System.in);
int i = input.nextInt();
String s = input.next();
}
}
if语句的多种运用方法:
一. 单if语句。
package com.sxt.ifdemo;
import java.util.Scanner;
/*
* Ctrl + Shift + F: 自动格式化代码
*
* 单if语句
* 需求: 小明考试成绩高于90分,奖励一个桃子
*
* 定义: 针对条件情况单一的时候选择单if语句
*
* 格式:
* if(条件表达式) {
* 语句体;
* }
*
* 执行流程:
* 1.判断条件表达式是否成立
* 成立
* 执行语句体
* 不成立
* 不处理
*
* 特点:
* 1.三目运算符Y和Z中只能够写一条语句,if语句可以有多条,能够使用三目改进,尽量使用三目
* 2.如果if语句中只有一条语句,大括号可以省略不写,建议写上
* 3.if(score >= 90);{},无论条件是否成立,{}都会被执行
*
* 课堂案例:
* 1、张三Java成绩大于98分,而且音乐成绩大于80分,老师奖励他;
* 或者Java成绩等于100分,音乐成绩大于70分,老师也可以奖励他。
*
*/
public class IfDemo01 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入考试成绩: ");
double score = input.nextDouble();
// System.out.println(score >= 90 ? "奖励桃子一个": "");
// if (score >= 90) System.out.println("奖励桃子");
if (score >= 90) {
System.out.println("奖励桃子");
}
input.close();
}
}
package com.sxt.ifdemo;
import java.util.Scanner;
/*
* 张三Java成绩大于98分,而且音乐成绩大于80分
* 或者
* Java成绩等于100分,音乐成绩大于70分
*
* 老师奖励他
*/
public class IfDemo02 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入Java成绩: ");
double javaScore = input.nextDouble();
System.out.print("请输入音乐成绩: ");
double musicScore = input.nextDouble();
if ((javaScore > 98 && musicScore > 80) || (javaScore == 100 && musicScore > 70)) {
System.out.println("奖");
}
}
}
if-else语句
三目运算符和if-else语句。 当二者都可以实现一样的效果,建议使用三目运算符实现。
能用三目运算符实现的都可以使用if-else实现,反之不一定成立。
package com.sxt.ifdemo;
import java.util.Scanner;
/*
* Ctrl + F11快速运行
* 需求: 隔壁老王考试成绩大于30分,奖励去隔壁家看电影,否则去隔壁家打牌
*
* 定义: 针对处理两种情况的时候使用if-else语句
*
* 格式:
* if(条件表达式) {
* 语句体1;
* } else {
* 语句体2;
* }
*
* 执行流程:
* 1.判断条件表达式是否成立
* 成立
* 执行语句体1
* 不成立
* 执行语句体2
*
* 特点:
* 1.条件表达式必须是boolean类型的
* 2.如果if或者else语句体中只有一条语句,大括号可以省略,建议不省略
*/
public class IfDemo03 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入考试成绩: ");
double score = input.nextDouble();
// System.out.println(score > 30 ? "隔壁家看电影": "隔壁家打牌");
if (score > 30) System.out.println("看电影");
else System.out.println("打牌");
}
}
二. 多重if语句。
package com.sxt.ifdemo;
import java.util.Scanner;
/*
* 多重if语句
* 需求: 老师批改试卷,
* 成绩在90分以上的为优秀,
* 成绩在80-90的为良好,
* 成绩在60-80的为及格,
* 60以下的为差,该怎么实现呢?
*
* 定义: 针对多种情况【区间】的时候选择多重if语句
*
* 格式:
* if(布尔表达式1) {
* 语句块1;
* } else if(布尔表达式2) {
* 语句块2;
* } ………
* else if(布尔表达式n){
* 语句块n;
* } else {
* 语句块n+1;
* }
*
* 执行流程:
* 逐条if语句进行判断
* 条件匹配,进入语句体
* 否则对if语句继续匹配
*
* 特点:
* 1.if语句和else语句只有一个,elseif语句可以有多个,else语句可以省略
* 2.无论多重if语句中有多少个语句体,每次只能够执行一个语句体
* 3.书写选择语句时候,注意一般都会先考虑写完其他情况
*/
public class IfDemo04 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入考试成绩: ");
double score = input.nextDouble();
/*if (score >= 90) {
System.out.println("A");
} else if (score >= 80) {
System.out.println("B");
} else if (score >= 60) {
System.out.println("C");
} else {
System.out.println("D");
}*/
// 增加程序的健壮性
// || 的反是 &&
// score > 100 || score < 0 的反条件 score <= 100 && score >= 0
/*if (score > 100 || score < 0) {
System.out.println("输入有误");
// score <= 100 && score >= 0 ~~~~ score >= 90
// score >= 90 && score <= 100
} else if (score >= 90) {
System.out.println("A");
} else if (score >= 80) {
System.out.println("B");
} else if (score >= 60) {
System.out.println("C");
} else {
System.out.println("D");
}*/
// 增加程序的可读性
if (score > 100 || score < 0) {
System.out.println("输入有误");
} else if (score >= 90 && score <= 100) {
System.out.println("A");
} else if (score >= 80 && score < 90) {
System.out.println("B");
} else if (score >= 60 && score < 80) {
System.out.println("C");
} else {
System.out.println("D");
}
}
}
三. 嵌套if语句。
package com.sxt.ifdemo;
import java.util.Scanner;
/*
* 嵌套if语句
* 需求:
* 学校举行运动会,
* 百米赛跑跑入10秒内的学生有资格进决赛,
* 根据性别分别进入男子组和女子组
*
* 定义: 针对条件特别复杂的情况,本质还是前三种if语句的相互结合
*
* 格式: 没有固定格式
*
* Debug断点调试
* 1.定义断点
* 2.进入Debug模式
*
* 注意:
* 1.判断两种类型是否相等
* 基本数据类型 == 比较的是数值本身
* 引用数据类型 == 比较的地址
*
* 引用数据类型比较是否相等暂时使用equals方法,后面讲解
* 2.嵌套if语句慎用,导致程序的可读性降低
*/
public class IfDemo05 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("请输入秒数: ");
double seconds = input.nextDouble();
System.out.print("请输入性别: ");
String gender = input.next();
if (seconds < 10) {
System.out.println("恭喜进入男子组全球总决赛!!!");
if (gender.equals("男")) {
System.out.println("恭喜进入男子组决赛,和博尔特同场竞技");
} else if (gender.equals("女")) {
System.out.println("恭喜进入女子组决赛,和女博尔特同场竞技");
} else {
System.out.println("人妖组决赛");
}
} else {
System.out.println("来年再战!!!");
}
}
}
四. switch多分支选择结构。
if语句
表达式的结果是boolean类型 常用于区间判断
switch语句
表达式类型不能是boolean类型,可以是byte short int char String 枚举 常用于等值判断
选择语句的选取:
能用switch语句实现的就一定可以使用if实现,但是反之不一定 如果是区间范围采用if,如果是等值判断使用switch
package com.sxt.switchdemo;
import java.util.Scanner;
/*
* 电话呼叫案例
欢迎致电中国电信,查询服务请按1,
宽带业务咨询办理请按2,
手机业务咨询办理请按3,
障碍报修请按4,
投诉业务请按5,
转人工服务请按6,
充值缴费请按7,
政府及企业客户请按8,
无需帮助请按请按0,
控制台输入对应的数字显示对应的服务。
输入有误显示“对不起您的输入有误”
定义: 常用于等值判断
switch语句
格式
switch (表达式) {
case 值1 :
语句序列;
[break];
case 值2:
语句序列;
[break] ;
… … … … …
[default:
默认语句 ;]
}
switch语句的特点:
1.表达式中可以有以下几种类型
byte short int char String(JDK7) 枚举类型(JDK5)
2.byte short int char之间在做switch判断的时候都是转换成int类型
3.可以有多个case子句,但是每一个case子句的取值不能够重复,而且必须是常量
4.break语句表示退出switch语句体,如果省略break子句,会出现break穿透现象
break现象: 会逐层向下执行case子句,直到退出switch语句
5.default子句类似于if中的else子句,一般出现在switch语句的最后面,
也可以出现在任意位置。
6.if语句常用于区间判断,而switch常用于等值判断,
if语句也可以用于等值判断,但是switch语句可读性更强
能够使用switch语句编写的选择语句,一定可以使用if语句改写,反之不一定
*/
public class SwitchDemo01 {
public static void main(String[] args) {
System.out.println("欢迎致电中国电信,查询服务请按1,\r\n" +
" 宽带业务咨询办理请按2,\r\n" +
" 手机业务咨询办理请按3,\r\n" +
" 障碍报修请按4,\r\n" +
" 投诉业务请按5,\r\n" +
" 转人工服务请按6,\r\n" +
" 充值缴费请按7,\r\n" +
" 政府及企业客户请按8,\r\n" +
" 无需帮助请按请按0,\r\n" +
" 控制台输入对应的数字显示对应的服务。\r\n" +
" 输入有误显示“对不起您的输入有误”");
Scanner input = new Scanner(System.in);
System.out.print("请输入选项: ");
int choice = input.nextInt();
String s = "abc";
switch (choice) {
case 1:
System.out.println("查询服务");
break;
case 2:
System.out.println("宽带业务咨询办理");
break;
case 3:
System.out.println("障碍报修");
break;
case 4:
System.out.println("投诉业务");
default:
System.out.println("该选项不存在!!!");
// break;
}
System.out.println("over");
}
}
package com.sxt.switchdemo;
import java.util.Scanner;
/*
* 控制台显示如下选择题:
1.执行下列语句,变量i的值是:
byte i = 127;
i =i+ 2;
A 0 B 编译不能通过
C 运行时抛出异常 D -127
请选择你的答案:
这里通过键盘录入,根据录入对应的选项显示不同的效果
正确显示 恭喜您!回答正确
错误显示 对不起!回答错误
输入错误的选项显示 您输入的选项有误
*/
public class SwitchDemo02 {
public static void main(String[] args) {
System.out.println("1.执行下列语句,变量i的值是:");
System.out.println("byte i = 127;");
System.out.println("i =i+ 2;");
System.out.println("A 0\t\tB 编译不能通过");
System.out.println("C 运行时抛出异常\tD -127");
Scanner input = new Scanner(System.in);
System.out.print("请输入您的答案: ");
String choice = input.next();
switch (choice) {
case "A":
System.out.println("对不起!回答错误");
break;
case "B":
System.out.println("正确显示 恭喜您!回答正确");
break;
case "C":
System.out.println("对不起!回答错误");
break;
case "D":
System.out.println("对不起!回答错误");
break;
default:
System.out.println("您输入的选项有误");
break;
}
}
}
扩展:随机数的生成
package com.sxt.randomdemo;
/*
* 随机数的生成
*/
public class RandomDemo01 {
public static void main(String[] args) {
for (int i = 0; i < 1000; i++) {
// 生成[0,1)的随机小数
// double num = Math.random();
// 生成[0,10)的随机小数
// double num = Math.random() * 10;
int num = (int) (Math.random() * 10);
System.out.println(num);
}
}
}