选择结构和分支结构
一、if结构
1.1 基本if结构
语法:
if(条件){
// 代码块
}
当条件为真时,会执行代码块。
// 基本if
public class Demo4 {
public static void main(String[] args) {
int hp = 550;
int count = 5;
// 如果我方人数大于3,并且敌方血量低于200,抢人头
if(count > 3 && hp < 200) {
System.out.println("抢人头");
}
}
}
1.2 if-else结构
语法:
if(条件){
// 代码块1
}else{
// 代码块2
}
// 流程:先判断条件是否成立,如果成立,则执行代码块1,否则执行代码块2
// if-else结构
public class Demo5 {
public static void main(String[] args) {
int num = 20;
if(num % 2 == 0) {
System.out.println("是偶数");
}else {
System.out.println("是奇数");
}
Scanner input = new Scanner(System.in);
System.out.println("请输入一个年份:");
int year = input.nextInt();
if(year % 400 == 0 || year % 4 == 0 && year % 100 != 0) {
System.out.println("是闰年");
}else {
System.out.println("不是闰年");
}
}
}
1.3 多重if结构
语法:
if(条件1){
// 代码块1
}else if(条件2){
// 代码块2
}else if(条件3){
// 代码块3
}else{
// 代码块4
}
// else if可以有任意个。
// 流程:如果条件1成立,则执行代码块1,结束;否则判断条件2是否成立,如果成立则执行代码块2,否则判断条件3是否成立,如果成立则执行代码块3,否则执行代码块4
注意:当有多个条件都成立时,会执行最上面一个成立的条件分支。
// 多重if结构
public class Demo6 {
public static void main(String[] args) {
int count = 3;
if(count > 2) {
System.out.println("越塔强杀");
}else if(count == 3) {
System.out.println("拿小龙");
}else if(count == 4) {
System.out.println("上高地");
}else if(count == 5) {
System.out.println("拿大龙");
}else {
System.out.println("安心补刀");
}
int score = 75;
if(score >= 80) {
System.out.println("成绩优秀");
}else if(score >= 60) {
System.out.println("成绩及格");
}else {
System.out.println("成绩不及格");
}
}
}
1.4 嵌套if结构
语法:
if(条件1){
// 代码块1
if(条件2){
// 代码块2
}
}
// 流程:按照前面的普通的if流程一步步往下执行
// 嵌套if结构
public class Demo7 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请选择阵营:1、联盟 2、部落");
int n1 = input.nextInt();
if(n1 == 1) {
// 选择了联盟
System.out.println("选择了联盟");
System.out.println("请选择种族:1、人族 2、精灵");
int n2 = input.nextInt();
if(n2 == 1) {
System.out.println("选择了人族");
System.out.println("请选择职业:1、战士 2、法师");
int n3 = input.nextInt();
if(n3 == 1) {
System.out.println("选择了战士");
}else {
System.out.println("选择了法师");
}
}else {
System.out.println("选择了精灵");
}
}else if(n1 == 2) {
// 选择了部落
System.out.println("选择了部落");
}else {
System.out.println("没有此选项");
}
}
}
二、switch结构
2.1 基本用法
语法结构:相当于if的多重if结构,但是只能匹配等值,不能使用大于、小于这些判断,而且只能判断以下类型:byte、short、int、char、String(JDK1.7+)
public class Demo8 {
public static void main(String[] args) {
int state = 2;
if(state == 1) {
System.out.println("冰冻状态");
}else if(state == 2) {
System.out.println("中毒状态");
}else if(state == 3) {
System.out.println("流血状态");
}else if(state == 4) {
System.out.println("眩晕状态");
}else {
System.out.println("其他状态");
}
}
}
将上面的结构使用switch来编写:
// switch结构
public class Demo8 {
public static void main(String[] args) {
int state = 2;
// fall-down
switch(state) {
case 1: // 判断state == 1
System.out.println("冰冻状态");
// 可以写多行,不需要大括号
// System.out.println("1111");
// System.out.println("222");
break;
case 2:
System.out.println("中毒状态");
break;
case 3:
System.out.println("流血状态");
break;
case 4:
System.out.println("眩晕状态");
break;
default: // 相当于else
System.out.println("其他状态");
break;
}
}
}
注意:当case中没有写break时,会继续向下执行,而且不会考虑case匹配,叫做fall-down
case 时不能有相同的值。
// switch结构合并case
// 输入一个月份,判断该月有几天
public class Demo9 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个月份:");
int month = input.nextInt();
int day = 0;
switch (month) {
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
day = 31;
break;
case 2:
day = 28;
break;
case 4:
case 6:
case 9:
case 11:
day = 30;
break;
default:
break;
}
System.out.println(day);
}
}
// 输入年、月、日,输出该日期是当年的第几天
// switch结构
public class Demo10 {
// 输入年、月、日,输出该日期是当年的第几天
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个年份:");
int year = input.nextInt();
System.out.println("请输入一个月份:");
int month = input.nextInt();
System.out.println("请输入一个日期:");
int day = input.nextInt();
int days = 0; // 最终计算天数的结果
switch (month) {
case 12:
days += 30; // 加11月的天数
case 11:
days += 31; // 加10月的天数...
case 10:
days += 30;
case 9:
days += 31;
case 8:
days += 31;
case 7:
days += 30;
case 6:
days += 31;
case 5:
days += 30;
case 4:
days += 31;
case 3:
if(year % 400 == 0 || year % 4 == 0 && year % 100 != 0) {
days += 29;
}else {
days += 28;
}
case 2:
days += 31;
case 1:
days += day; // 加上当月的天数
break;
default:
break;
}
System.out.println(year + "年" + month + "月" + day + "日是当年的第"+days+"天");
}
}
三、局部变量
- 局部变量应该先赋值,后使用。
- 局部变量的作用域范围:在该变量对应的一对大括号中,从该变量定义的行开始,后面都其适用范围
- 局部变量在重合的作用域中,不能同名,会出现变量名冲突。
// 作用域范围
public class Demo11 {
// 局部变量的作用域范围:在该变量对应的一对大括号中,从该变量定义的行开始,后面都其适用范围
public static void main(String[] args) {
int a = 5;
int m = 5;
if(m > 2) {
int n = 10;
if(m > 2) {
System.out.println(n);
}
}else {
int n = 4;
System.out.println(a); // 使用外面的a
}
// System.out.println(n);// 报错
}
}