06-顺序结构,选择结构[if,switch]
①.Scanner的使用
Scanner基础知识
什么是Scanner:
是JDK5的新特性,在java.util.Scanner中,为用户提供一种输入的交互的方法。
基本语法:
Scanner scanner = new Scanner(System.in);
基本用法:
通过Scanner类中的next()与nextLine()方法获取输入的字符串,在读取的时候开发者需要使用hasNext()与hasNextLine()判断是否有输入的数据。
使用注意:凡属于IO流的类不关闭就会一直占用资源,所以用完就要关掉。
关闭方法:scanner.close();
.next()与.nextLine()的区别:
- .next():
一定要读取到有效字符之后才结束输入;
对输入的有效字符之前的空白,next()方法会自动将其去掉;
输入有效字符之后,空白将作为分隔符或者结束符;
next()不能获取带有空格的字符串。- nextLine():
以Enter作为结束符,返回值是Enter之前输入的所有字符;
nextLine()方法可以获取空白。
Scanner scanner = new Scanner(System.in);
String str = scanner.next();
//输出 hello .next()方法遇到空格字符将会终止
System.out.println("输入内容为:" + str);
String str2 = scanner.nextLine();
//输出 hello world! .nextLine()方法遇到回车才会中止
System.out.println("输入内容为:" + str2);
scanner.close();
Scanner进阶知识
目的:运用Scanner获取用户输入的不同数据类型的数据。
用法:
通过next数据类型来获取相应类型数据。
通过hasNext数据类型来判断是否有相应的数据类型输入。
语句 | 作用 |
---|---|
nextInt() | 获取下一个整型数据 |
nextLong() | 获取下一个长整型数据 |
nextDouble() | 获取下一个双精度浮点数据 |
··· ··· | ··· ··· |
nextBigDecimal() | 获取一个BigDecimal类型的数据 |
语句 | 作用 |
---|---|
hasNextInt() | 判断下一个输入是否为整型数据 |
hasNextLong() | 判断下一个输入是否为长整型数据 |
hasNextDouble() | 判断下一个输入是否为双精度浮点数据 |
··· ··· | ··· ··· |
hasNextBigDecimal() | 判断下一个输入是否为BigDecimal类型的数据 |
//**需求**:从键盘获取多个数据,以回车作为分隔,统计输入的个数,输出这些数据的总和与平均数,当输入数为非数字时结束程序。
public static void main(String[] args){
//新建一个扫描器对象来获取用户的输入
Scanner scanner = new Scanner(System.in);
//定义双精度sum来存储总和数据,定义整型数据来记录输入了多少个数
double sum = 0.0;
int count = 0;
while(scanner.hasNextDouble()){ //循环判断是否有双精度的数字输入
double num = scanner.nextDouble(); //获取输入的数据
sum += num;
count++;
System.out.println("has input " + count + " num " + " sum = " + sum);
}//如果输入的不是数字则直接退出while循环
System.out.println(count + " num has input" + " sum = " + sum + " average = " + (sum/count));
scanner.close();
}
②.顺序结构
- Java语句的默认结构就是顺序结构!从上至下,一条一条执行下去。
这样的结构是任何一个算法都离不开的基本算法结构。
③.选择结构
- if单选择结构
如果 条件成立 则 执行A
public class IfSingleTest {
public static void main(String[] a){
Scanner scanner = new Scanner(System.in);
System.out.print("请输入内容:");
//定义字符串接受输入的内容
String s1 = scanner.nextLine();
if(s1.equals("Hello")){ //判断输入字符串与预设内容是否相等,相等则输出预设内容
System.out.println("Hello Developer!");
}
System.out.println("END");
scanner.close();
}
- if双选择结构
如果 条件成立 则 执行A ;否则 就 执行B
public class IfDoubleTest {
public static void main(String[] a){
Scanner scanner = new Scanner(System.in);
System.out.print("请输入考试成绩:");
int score = scanner.nextInt();
if (score >= 60) System.out.println("及格!");
else System.out.println("不及格!");
scanner.close();
}
- if多选择结构
如果 A条件成立 则 执行A 否则如果 B条件成立 则 执行B······否则如果 N条件成立 则 执行N 否则 执行默认
public static void main(String[] a){
Scanner scanner = new Scanner(System.in);
System.out.print("请输入你的成绩:");
//获取输入的成绩数据
double score = scanner.nextDouble();
//if多选择结构来判断成绩的等级
if (score == 100) System.out.println("恭喜满分!");
else if(score < 100 && score >= 90) System.out.println("LevelA");
else if(score < 90 && score >= 80) System.out.println("LevelB");
else if(score < 80 && score >= 60) System.out.println("LevelC");
else if(score < 60) System.out.println("不及格!");
else System.out.println("非法输入!");
scanner.close();
}
- 嵌套的if结构
public static void main(String[] a){
Scanner scanner = new Scanner(System.in);
System.out.print("请输入性别:");
String sex = scanner.next();
if(sex.equals("男")){
System.out.print("请输入年龄:");
int age = scanner.nextInt();
if (age >= 50) System.out.println("已过中年!");
else System.out.println("年轻着呢!");
}else if(sex.equals("女")){
System.out.print("请输入年龄:");
int age = scanner.nextInt();
if (age >= 50) System.out.println("永远都是小仙女!");
else System.out.println("一直都是小仙女!");
}else {
System.out.println("非法输入!");
}
}
if结构注意事项
- if语句至多有一个else语句,else语句在所有的else if语句之后
- if语句可以有若干个else if语句,他们必须在else语句之前
- 当其中一个else if被检测为true之后,将跳过其他的else if以及else语句。
- switch多选择结构
定义:多选择结构的另一个实现方式 switch case语句
原理:判断的一个值是否与一个列表中的有一个值相等,是则执行相应语句。
//switch语句的语法结构
switch(expression){
case value1:
//语句1
break; //可以选择不写
case value2:
//语句2
break; //可以选择不写
······
case valueN:
//语句N
break; //可以选择不写
default : //可以选择不写
//默认语句
}
注意:
- switch接受的变量类型可以是:byte,short,int,char,String(JDK7之后)
- case标签必须为字符串常量或字面量
- break语句是可选的,如果省略就会发生case穿透现象,程序会穿透case一直到遇到下一个break语句或者直到switch语句结束。
拓展小知识
将.class文件直接在IDEA中打开,便可以实现反编译,并查看反编译之后的代码。