好久不见,甚是想念! 大家好!
我是微风洋洋 今天这篇文章就是来和大家详细聊聊Java程序流程控制中的分支结构,希望大家读完有所收获,那我辛苦码字也就值了。如果你觉得对你有一丢丢启发的话,不妨 点赞、收藏、关注支持一下,你的支持将是我继续创作的最大动力。下一篇将介绍Java循环结构,不见不散~~~
流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组 合成能完成一定功能的小逻辑模块。
其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:
-
顺序结构 程序从上到下逐行地执行,中间没有任何判断和跳转。 -
分支结构 根据条件,选择性地执行某段代码。 有if…else和switch-case两种分支语句。 -
循环结构 根据循环条件,重复性的执行某段代码。 有while、do…while、for三种循环语句。 注:JDK1.5提供了foreach循环,方便的遍历集合、数组元素。
一、顺序结构
Java中定义成员变量时采用合法的前向引用。如: public class Test{ int num1 = 12; int num2 = num1 + 2; } 错误形式: public class Test{ int num2 = num1 + 2; int num1 = 12; }
二、分支结构
if-else结构(条件判断结构)
if语句三种格式:
- if(条件表达式){
执行代码块; } - if(条件表达式){
执行代码块1; } else{ 执行代码块2; } - if(条件表达式1){
执行代码块1; } else if (条件表达式2){ 执行代码块2; } …… else{ 执行代码块n; }
分支结构:if-else使用说明
- 条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量
- 语句块只有一条执行语句时,一对{}可以省略,但建议保留
- if-else语句结构,根据需要可以嵌套使用
- 当if-else结构是“多选一”时,最后的else是可选的,根据需要可以省略
- 当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓当多个条件是“包含”关系时,“小上大下 / 子上父下”
如何从键盘获取不同类型的变量:需要使用Scanner类 命令行具体实现步骤: 1.导包:import java.util.Scanner;
2.Scanner的实例化:Scanner scan = new Scanner(System.in);
3.调用Scanner类的相关方法(next()/nextXxx),来获取指定类型的变量 对char型的获取,Scanner没有提供相关的方法,只能获取一个字符串
package com.weifengyangyang.contact;
//1.导包:import java.util.Scanner;
import java.util.Scanner;
public class ScannerTest {
public static void main(String[] args){
//2.Scanner的实例化:Scanner scan = new Scanner(System.in);
Scanner scan = new Scanner(System.in);
//3.调用Scanner类的相关方法(next()/nextXxx),来获取指定类型的变量
System.out.println("请输入你的姓名");
String name = scan.next();
System.out.println(name);
System.out.println("请输入你的芳龄");
int age = scan.nextInt();
System.out.println(age);
System.out.println("请输入你的体重");
double weight = scan.nextDouble();
System.out.println(weight);
System.out.println("你是否相中我了呢?(true/false)");
boolean isLove = scan.nextBoolean();
System.out.println(isLove);
//对char型的获取,Scanner没有提供相关的方法,只能获取一个字符串
System.out.println("请输入你的性别:(男/女)");
String gender = scan.next();
char genderChar = gender.charAt(0);//获取索引为0位置上的字符
System.out.println(genderChar);
}
}
注意:需要根据相应的方法输入指定类型的值。如果输入的数据类型与要求的类型不匹配时,会报异常,程序终止
经典例题
例1.岳小鹏参加Java考试,他和父亲岳不群达成承诺:如果: 成绩为100分时,奖励一辆BMW; 成绩为(80,99]时,奖励一台iphone xs max;当成绩为[60,80]时,奖励一个 iPad; 其它时,什么奖励也没有。 请从键盘输入岳小鹏的期末成绩,并加以判断
package com.weifengyangyang.contact;
import java.util.Scanner;
public class IfTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入岳小鹏的期末成绩(0-100)");
int grade = scan.nextInt();
if(grade == 100){
System.out.println("奖励一辆BMW");
}else if(grade > 80 && grade <= 99){
System.out.println("奖励一台iphone xs max");
}else if(grade >= 60 && grade <= 80){
System.out.println("奖励一个 iPad");
}else{
System.out.println("什么奖励也没有");
}
}
}
说明: 1.else结构是可选的 2.当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓,当多个条件是“包含”关系时,“小上大下 / 子上父下”
例2.编写程序:由键盘输入三个整数分别存入变量num1、num2、num3, 对它们进行排序(使用 if-else if-else),并且从小到大输出。
package com.weifengyangyang.contact;
import java.util.Scanner;
public class IfTest2 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个整数");
int num1 = scan.nextInt();
System.out.println("请输入第二个整数");
int num2 = scan.nextInt();
System.out.println("请输入第三个整数");
int num3 = scan.nextInt();
int max,middle,min;
if(num1 > num2){
if(num3 > num1){
System.out.println(num3+","+num1+","+num2);
}else if(num3 < num2){
System.out.println(num1+","+num2+","+num3);
}else{
System.out.println(num1+","+num3+","+num2);
}
}else if(num3 > num2){
System.out.println(num3+","+num2+","+num1);
}else if(num3 < num1){
System.out.println(num2+","+num1+","+num3);
}else{
System.out.println(num2+","+num3+","+num1);
}
}
}
说明: 1.if-else结构可以嵌套使用 2.如果if-else结构中的执行语句只有一行时,对应的{}可以省略,但是不建议省略
例3.对下列代码,若有输出,指出输出结果。
int x = 4; int y = 1;
if (x > 2) {
if (y > 2)
System.out.println(x + y);
System.out.println("atguigu");
} else
System.out.println("x is " + x);//输出:atguigu
int x = 4; int y = 1;
if (x > 2)
if (y > 2)
System.out.println(x + y);
else
System.out.println("x is " + x);//输出:4
说明: else配对按就近原则,与离else最近的if配对
switch-case结构
switch(表达式){ case 常量1: 语句1; // break; case 常量2: 语句2; // break; … … case 常量N: 语句N; // break; default: 语句; // break;
-
根据switch表达式中的值,依次匹配各个case中的常量,一旦匹配成功,则进入相应case结构中,调用其执行语句,当调用完执行语句后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case末尾结束为止 -
break,可以使用在switch-case结构中,表示一旦执行到次关键字,就跳出switch-case结构 -
switch结构中的表达式,只能是如下的6中数据类型之一:byte、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增) -
case之后只能声明常量,不能声明范围 -
break关键字是可选的 -
default相当于if-else结构中的else。default是可选的,而且位置是灵活的
经典例题
例4.使用 switch 把小写类型的 char型转为大写。只转换 a, b, c, d, e. 其它的输 出 “other”。 提示:String word = scan.next(); char c = word.charAt(0); switch?{}
package com.weifengyangyang.contact;
import java.util.Scanner;
public class SwitchTest2 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入小写字母");
String small = scan.next();
char samllchar = small.charAt(0);
switch(samllchar){
case 'a':
System.out.println('A');
break;
case 'b':
System.out.println('B');
break;
case 'c':
System.out.println('C');
break;
case 'd':
System.out.println('D');
break;
case 'e':
System.out.println('E');
break;
default:
System.out.println("other");
}
}
}
例5.对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。
package com.weifengyangyang.contact;
import java.util.Scanner;
public class SwitchTest3 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scan = new Scanner(System.in);
System.out.println("请输入成绩(0-100)");
int score = scan.nextInt();
switch(score / 10){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("不及格");
break;
default:
System.out.println("及格");
//更优的方法
switch(score / 60){
case 0 :
System.out.println("不及格");
break;
case 1 :
System.out.println("不及格");
break;
}
}
}
}
说明:如果switch-case中的结构中的多个case的执行语句相同,则可以考虑进行合并
关注,即可提高学习效率。Perfect!
|