程序流程控制
1.顺序结构
2.分支结构
3.循环结构
if-else结构(三种结构)
第一种:
if(条件表达式){
执行表达式
}
第二种:
if(条件表达式){
执行表达式1
}else{
执行表达式2
}
第三种:多选一
if(条件表达式){
执行表达式1
}else if(条件表达式){
执行表达式2
}else if(条件表达式){
执行表达式3
}
…
else{
执行表达式
}
class IfTest{
public static void main(String[] args){
//列子1
int heartBeats = 78;
if(heartBeats < 60 || heartBeats > 100){
System.out.println("需要做进一步检测");
}
System.out.println("正常");
//举例2
int age = 23;
if(age < 18){
System.out.println("看动画片");
}else{
System.out.println("看电影");
}
//例子3
if(age < 0){
System.out.println("输入数据非法");
}else if(age < 18){
System.out.println("少年");
}else if(age < 35){
System.out.println("青壮年");
}else if(age < 60){
System.out.println("中年");
}else if(age < 120){
System.out.println("老年");
}else{
System.out.println("神仙");
}
}
}
如何从键盘获取不同类型的变量:需要使用Scanner类
具体实现步骤:
1.导包:import java.util.Scanner;
2.Scanner的实例化Scanner scan = new Scanner(System.in);
3.调用Scanner类的相关方法,来获取指定类型的变量
对于char型的获取,Scanner没有提供相关的方法,只能获取一个字符串
注意:
需要根据相应的方法,来输入指定类型的值,如果输入的类型与要求的类型不匹配时,会报异常,导致程序终止
import java.util.Scanner; //导包
class ScannerTest{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入年龄");
int age = scan.nextInt();
System.out.println(age);
System.out.println("请输入姓名");
String name = scan.next();
System.out.println(name);
System.out.println("请输入你的体重");
double weight = scan.nextDouble();
System.out.println(weight);
System.out.println("你是否相中我了");
boolean isLove = scan.nextBoolean();
System.out.println(isLove);
System.out.println("请输入性别");
String gender = scan.next();
char genderChar = gender.charAt(0); //获取索引为0位置上的字符
System.out.println(gender);
}
}
例题1:
参加考试,分属不同,奖励不同。要求 从键盘输入期末成绩并加以判断。
说明:
1.else是可选的
2.对于条件表达式:
(1)如果多个表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面都可以,无所谓
(2)如果多个表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面
(3)如果多个表达式之间有包含关系,通常情况下,需要将范围小的声明在范围大的上面,否则范围小的机会就没机会执行了
import java.util.Scanner;
class IfTest1{
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
System.out.println("请输入期末考试成绩");
int score = scan.nextInt();
if(score == 100){
System.out.println("奖励一台轿车");
}else if(score > 80 && score <= 99){
System.out.println("奖励一台手机");
}else if(score >= 60 && score <= 80){
System.out.println("奖励一台ipad");
}else{
System.out.println("什么都没有");
}
例题2:
由键盘输入三个整数分别存入变量num1、num2、num3,对它们进行排序(使用if-else if-else),并且从小到大输出
说明:
1.if-else结构可以嵌套
2.如果if-else结构中的执行语句只有一行时,对应的一对{}可以省略,但是不建议这么做
System.out.println("请输入第一个整数");
int num1 = scan.nextInt();
System.out.println("请输入第二个整数");
int num2 = scan.nextInt();
System.out.println("请输入第三个整数");
int num3 = scan.nextInt();
if(num1 > num2){
if(num3 > num1){
System.out.println(num2 + "," + num1 + "," + num3);
}else if(num3 <= num2){
System.out.println(num3 + "," + num2 + "," + num1);
}else{
System.out.println(num2 + "," + num3 + "," + num1);
}
}else{
if(num3 > num2){
System.out.println(num1 + "," + num2 + "," + num3);
}else if(num3 < num1){
System.out.println(num3 + "," + num1 + "," + num2);
}else{
System.out.println(num1 + "," + num3 + "," + num2);
}
}
分支结构之二 Switch-case
表达式:
Switch(表达式){
case 常量1:
执行语句1;
//break;
case 常量2:
执行语句2;
//break;
…
default:
执行语句n;
//break;
}
说明:
1.根据switch表达式中的值,依次匹配我们各个case的常量,一旦匹配成功则进入相应case中的执行语句,当调用完执行语句以后则仍然向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构末尾结束为止
2.break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构
3.switch结构中的表达式,只能是如下的六种数据类型之一:分别是byte、short、char、int、枚举类型(jdk5.0新增)、String类型(jdk7.0新增)
4.case之后只能声明常量,不能声明范围
5.break关键字是可选的
6,default:相当于if-else中的else,default结构也是可选的,位置也是可选的
7.如果switch-case结构中的多个case的执行语句相同,则可以进行合并
import java.util.Scanner;
class SwitchCaseTest{
public static void main(String[] args){
int num = 2;
switch(num){
case 0:
System.out.println("zero");
break;
case 1:
System.out.println("one");
break;
case 2:
System.out.println("two");
break;
case 3:
System.out.println("three");
break;
default:
System.out.println("other");
}
例题:学生成绩大于60合格,低于60不合格
Scanner scan = new Scanner(System.in);
System.out.println("请输入期末考试成绩");
int score = scan.nextInt();
switch(score / 10){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("不及格");
break;
case 6:
case 7:
case 8:
case 9:
case 10:
System.out.println("及格");
break;
}
//更优:score / 60;
例题2:从键盘输入2019年的“年”、“month”和“day”,判断输出输入日期为当年的第几天
System.out.println("输入的年");
int year = scan.nextInt();
System.out.println("输入的月");
int month = scan.nextInt();
System.out.println("输入的日");
int day = scan.nextInt();
/*
int sumDays = 0;
if(month == 1){
sumDays = day;
}else if(month == 2){
sumDays = 31 + day;
}
...
else(month == 12){
sumDays=31 + ...
}
有数据冗余
同理:按相同的switch-case写也有这个问题
*/
//倒着写可以避免冗余,不加break
int sumDays = 0;
switch(month){
case 12:
sumDays += 30;
case 11:
sumDays += 31;
case 10:
sumDays += 30;
case 9 :
sumDays += 31;
case 8:
sumDays += 31;
case 7:
sumDays += 30;
case 6:
sumDays += 31;
case 5:
sumDays += 30;
case 4:
sumDays += 31;
case 3:
//判断是否为闰年
if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){
sumDays += 29;
}else{
sumDays += 28;
}
case 2:
sumDays += 31;
case 1:
sumDays += day;
}
System.out.println(year + "年" + month + "月" + day + "日是当年的第" + sumDays + "天");
}
}
说明:
1.凡是可以使用switch-case的结构都可以转换为if-else,反之不成立。
2.当我们写分支结构时,既可以使用if-else,又可以使用switch-case(同时switch中的表达式的取值情况不太对多)我们优先选择switch-case