04
一、键盘录入(输入)
Java语言中,输入与输出相比是极其复杂的。
首先假设要获取两个整数的最大值,这两个整数不是程序内部定义的变量,而是通过键盘输入给计算机。
- 首先导入
Scanner
的类包 - 创建
Scanner
对象并传入System.in
System.out
代表标准输出流,而System.in
代表标准输入流
Scanner scanner = new Scanner(System.in);
- 通过
nextInt()
方法接受键盘录入的整数值(此方法只接受键盘录入的整数值)- 要读取用户输入的字符串,使用
scanner.nextLine()
,要读取用户输入的整数,使用scanner.nextInt()
- 用于接收键盘录入的String类型的数据:
scanner.next()
nextLine()
在nextInt()
下面使用的时候,会将换行符当做字符串进行接收,从而使得少输入一个字符序列所以建议使用next()
方法替换掉nextLine()
- 要读取用户输入的字符串,使用
int a = sc.nextInt();
- 将数据存储到变量中
- 比较大小
补:
正则表达式:相当于一个模板过滤器,符合这个模板的通过,不符合的自动清出
import java.util.Scanner;
public class Demo1{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一位数:");
int a = sc.nextInt();
System.out.println("请输入第二位数:");
int b = sc.nextInt();
System.out.println("请输入第三位数:");
int c = sc.nextInt();
int amax = a>b?a:b;
int max=amax>c?amax:c;
System.out.println("最大值为:"+max);
}
}
二、流程控制结构
1.顺序结构
- 代码从上往下依次执行
2.选择结构
- 也叫分支结构,选择结构会根据执行的结果而选择不同的代码执行
if语句
第一种形式
- 格式:
if(关系表达式|boolean值){
语句体;
}
-
执行流程:
-
首先判断关系表达式结果是true还是false
-
如果是true,执行语句体
-
如果是false,跳过语句体,执行下一步
public class Demo2 {
public static void main(String[] args) {
int a = 30;
int b = 50;
int max = a;
if(a<b) {
max = b;
}
System.out.println("最大值为:"+max);
}
}
注意:
if语句中的大括号是可以省略的,省略之后 ,只能限定离其最近的那一条语句,故不建议省略
public class Demo3 {
public static void main(String[] args) {
int a = 5;
int b = 10;
if (a > b)
System.out.println("你好");
System.out.println("哈哈");
System.out.println("嘿嘿");
System.out.println("呵呵");
}
}
第二种形式
- 格式
if(关系表达式){
执行语句1;
}else{
执行语句2;
}
- 执行流程
- 首先判断关系表达式看其结果是true还是false
- 如果是true就执行语句体1
- 如果是false就执行语句体2
public class Demo4 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个整数");
int num = sc.nextInt();
if (num % 2 == 0) {
System.out.println("偶数");
} else {
System.out.println("奇数");
}
}
}
总结:两条执行语句,必须会有一条执行
注意:
如果else后面没有小括号,意味着执行else这个代码块,不需要任何的判断
第三种形式
- 格式
if(关系表达式1){
执行语句1;
}else if(关系表达式2){
执行语句2;
}....else if(关系表达式n){
执行语句n;
}else{
执行语句n+1;
}
-
执行流程
- 首先判断关系表达式1,看其结果是true还是false
- 如果是true,执行语句体1
- 如果是false就继续判断关系表达式2,看其结果是true还是false
- 如果是true,执行语句体2
- 如果是false就继续判断关系表达式…,看其结果是true还是false
- …
- 如果没有任何表达式为true,就执行语句体n+1
总结:不管是if,还是else if,还是else;所有的执行语句里面,只能有一条执行成功
public class Demo5 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个月份:");
int month = scanner.nextInt();
if (month<1 || month>12) {
System.out.println("捣乱的拖出去斩了");
}else if(month>=3 && month<=5){
System.out.println("春天");
}else if(month>=6 && month<=8){
System.out.println("夏天");
}else if(month>=9 && month<=11){
System.out.println("秋天");
}else {
System.out.println("冬天");
}
}
}
补:
if…else语句和三目运算符之间的相互转换
- 凡是三目运算符能表示的 ,if…else语句必定可以实现;但是if…else可以实现的,三目运算符未必可以实现
public class Demo6 {
public static void main(String[] args) {
int a = 10;
int b = 20;
int max1 = a > b ? a : b;
System.out.println(max1);
int max2 = 0;
if (a > b) {
max2 = a;
}else {
max2 = b;
}
System.out.println(max2);
}
}
switch语句
- 格式
switch (key) {
case value1:
语句1;
break;
case value2:
语句2;
break;
case value3:
语句3;
break;
....
default:
语句n;
break;
}
- 执行流程
- 首先计算出表达式的值
- 其次,和case依次比较,一旦有对应的值,就会执行相应的语句;在执行的过程中,遇到break就会结
- 最后,如果所有的case都和表达式的值不匹配,就会执行default语句体n,然后结束
- 表达式的类型
- byte,short,int,char,枚举 JDK7: String,menu
- 注意事项
- value是一个常量值或者生成常量值的表达式
- case中的value值不能重复
- case的顺序没有要求,可以放到任意位置
- default不一定非要放在最后,java语言中习惯将其放在最后
- default可以省略
- break也可以省略,但是不建议省略。如果省略的话,代码会继续向下执行,不管下面的case是否匹配成功,一直执行到再次遇到break,或者是执行到了switch语句结束
- switch语句遇到break或者代码执行到switch语句的最后会结束
import java.util.Scanner;
public class Demo7 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩:");
int num1 = scanner.nextInt();
int num2 = num1 / 10;
if (num1>100 || num1<0) {
System.out.println("成绩出错");
return;
}
switch (num2) {
case 10:
case 9:
System.out.println("该成绩为A");
break;
case 8:
System.out.println("该成绩为B");
break;
case 7:
System.out.println("该成绩为C");
break;
case 6:
System.out.println("该成绩为D");
break;
default:
System.out.println("该成绩为E,建议补考");
break;
}
}
}