前言:菜鸟一枚,如有问题欢迎大家在评论区指出,我们一起学习。
1.3.1:输入语句Scanner
使用方法:
//使用Scanner需要导入这个包 如不导入,在使用Scanner时需要用全称(java.util.Scanner)
import java.util.Scannner;
Scanner input = new Scannner(System.in);
int num = input.nextInt();//输入int类型数据
long bigNum = input.nextLong();//long类型
double d = input.nextDouble();//short类型
boolean b = input.nextBoolean();//布尔类型
String s = input.next();//字符串类型
String ss = input.nextLine();//另一种字符串输入方式
char c = input.next().charAt(0);//先按照字符串接收,然后再取字符串的第一个字符(下标为0)
.next()与.nextLine()区别:
.next() :在输入字符串时,在未读取到有效数据时,会吞掉缓冲区的空格和回车。在获取到有效数据后,遇到空格和回车就会停止输入。
String s = input.next();//输入 中国 人民,中国前面的空格和中国后面的内容都不会赋给s,前面的空格会被吞掉,后面的遇到空格停止输入了。
.nextLine() :在输入字符串时,遇到回车就会停止输入。
String ss = input.nextLine();//输入 中国 人民,会原封不动赋给ss。
注意:虽然.next()和.nextLine()都能读取字符串,但是在使用时有陷阱。.next()和.nextLine()都可以与.nextInt()等混用,但是当.nextLine()在.nextInt()等下面时,会得到不同的结果。
int num = input.nextInt();
String s = input.nextLine();
//这段代码可以正常给num赋值,但是s确是一个空的字符串,无法输入
/*
原因是在使用.nextInt()等方法输入时会以回车结束输入,这个回车会存在输入缓冲区,这些方法在使用时会吞掉回车不会读取它。(包括.next()方法,因为它没读到有效数据)但是.nextLine()会直接读取这个回车,导致停止输入。
*/
//解决方法
int num = input.nextInt();
input.nextLine();//这个用于吞掉缓冲区的回车,不需要接收,便于下一个正常输入
String s = input.nextLine();
1.3.2:if-else结构
if-else结构有单分支,双分支,多分支三种结构,并且if-else可以嵌套。
//单分支
if(条件表达式){
语句体;
}
//双分支
if(关系表达式) {
语句体1;
}else {
语句体2;
}
//多分支
if (判断条件1) {
执行语句1;
} else if (判断条件2) {
执行语句2;
}
...
}else if (判断条件n) {
执行语句n;
} else {
执行语句n+1;
}
//嵌套
if(关系表达式) {
if(关系表达式) {
语句体1;
}else {
语句体2;
}
}else {
语句体3;
}
1.3.3: switch- case结构
语法结构:
switch(表达式){
case 常量值1:
语句块1;
break;
case 常量值2:
语句块2;
break;
default:
语句块n+1;
}
执行过程,将表达式的值与各个常量自上往下进行比较,若是相等,则执行case对应的语句块。在执行语句块完毕时,若有break语句,则跳出switch-case结构,如果没有该语句,则会进行case的穿透。所谓case穿透,就是没有遇到break或者default时,程序会一直执行下去,知道所有语句执行结束。
注意:表达式值的类型只能是:4种基本数据类型(byte,short,int,char),两种引用数据类型(String,枚举)。
注意:case后面必须是常量,而且不能重复。
注意:default无论在哪个位置,总是最后执行,但case必须自上往下。
利用case穿透简化代码:
//不利用case穿透需要重复写输出语句
switch(num){
case 1:
case 3:
case 5:
System.out.println("奇数");
break;
case 2:
case 4:
case 6:
System.out.println("偶数");
break;
}
//错误方法1
switch(num){
case 1,3,5:
System.out.println("奇数");
break;
case 2,4,6:
System.out.println("偶数");
break;
}
//错误方法2
switch(num){
case 1|3|5:
System.out.println("奇数");
break;
case 2|4|6:
System.out.println("偶数");
break;
}
//java12以后的新方法,case后面可以接多个常量,并且每一句都会自动break,不用担心漏写break
switch(month) {
case 1,3,5 -> System.out.println("奇数");
case 2,4,6 -> System.out.println("偶数");
};