Java分支(选择)结构
当在实现某个功能语句时,如果需要通过某一个条件去判断,则用分支(选择)结构。
Java 提供了 if
和 switch
两种分支语句。其中 if
语句使用布尔表达式或布尔值作为分支条件来进行分支控制,而 switch
语句则用于对多个整型值进行匹配,从而实现分支控制。
if分支语句
单行if语句(if)
语法格式为:
if(条件表达式){
//statement list
}
上面格式的条件表达式可以是任意一种逻辑表达式,但最后返回的结果必须是一个布尔值。
如果条件为真,那么执行语句块;如果条件为假,则语句块将被绕过而不被执行。
示例代码:
import java.util.*;
public class Test{
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
double price = console.nextDouble();
double cost = 0;
if(price > 100){
cost = price * 0.9;
}
System.out.println(cost);
}
}
多行if语句(if-else)
单行 if
语句仅能在满足条件时使用,而无法执行任何其他操作(停止),而结合 else
语句的 if
可以定义两个操作。
语法格式为:
if (条件表达式) {
//statement list 1
}
else {
//statement list 2
}
上面格式中,如果if
后的条件表达式成立,则执行statement list 1
,否则执行statement list 2
。
示例代码:
import java.util.*;
public class Test{
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
double price = console.nextDouble();
double cost = 0;
if(price > 100){
cost = price * 0.9;
}
else{
cost = price;
}
System.out.println(cost);
}
}
多条件if语句(if-else if)
有时候程序的分支会很复杂,这就需要使用多分支的 if…else if
语句。
语法格式为:
if (条件表达式1) {
//statement list 1
}
else if(条件表达式2){
//statement list 2
}
...
else if(条件表达式n-1){
//statement list n-1
}
else{
//statement list n
}
执行多条件语句时,依次判断表达式的值,当某个分支的条件表达式的值为 true
时,则执行该分支对应的语句块,然后跳出整个 if
语句继续执行后续程序;如果所有的表达式均为 false
,则执行语句块 statement list n
,然后继续执行后续程序。
示例代码:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
double price = console.nextDouble();
double cost = 0;
if(price < 100){
cost = price;
}
else if((price >= 100) && (price < 500)){
cost = price * 0.9;
}
else if((price >= 500) && (price < 2000)){
cost = price * 0.8;
}
else if((price >= 2000) && (price < 5000)){
cost = price * 0.7;
}
else{
cost = price * 0.6;
}
System.out.println(cost);
}
}
嵌套if语句
嵌套语句的用法非常灵活,具体如何嵌套视实际需求而定。
其中一种嵌套的语法格式为:
if(条件表达式1) {
if(条件表达式2) {
//statement list 1
}
else {
//statement list 2
}
}
else{
if(条件表达式3) {
//statement list 3
}
else if(条件表达式4) {
//statement list 4
}
else {
//statement list 5
}
}
在上述格式中,应该注意每一条 else
语句与离它最近且没有其他 else
语句对应的 if
语句相搭配。
示例代码:
import java.util.*;
public class Test{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int score = sc.nextInt();
if(score > 630) {
if(score > 650) {
System.out.println("恭喜考上C9!");
}
else {
System.out.println("恭喜考上985!");
}
}
else{
if(score > 600) {
System.out.println("恭喜考上重点大学!");
}
else if(score > 450 && score<600) {
System.out.println("恭喜考上本科!");
}
else {
System.out.println("很遗憾与本科失之交臂");
}
}
}
}
switch分支语句
单行switch语句
switch
语句是Java的多路分支语句,它提供了一种基于一个表达式的离散值来使程序执行不同部分的简单方法。
语法格式为:
switch(表达式) {
case 值1:
//statement list 1
break;
case 值2:
//statement list 2
break;
…
case 值n-1:
//statement list n-1
break;
default:
//statement list n
break;
}
switch
后的小括号里表达式必须为整型或字符型。Java 7开始还可以是 java.lang.String
类型的变量或表达式。
case
标签可以是:
- 类型为整型或字符型的常量表达式
- 枚举常量
- 从 Java SE 7 开始,
case
标签还可以是字符串常量。
例如:
String input = ...;
switch (input.toLowerCase()) { // toLowerCase用于将大写字符转换为小写
case "yes":
...
break;
}
enum Signal {
GREEN, YELLOW, RED
}
public class TrafficLight {
Signal color = ...;
public void change() {
switch (color) {
case RED:
//statement
break;
}
default
块和 case
块的先后顺序可以变动,不会影响程序执行结果。因为 switch
语句的执行过程为:表达式的值与每个 case
块中的常量作比较。如果发现了一个与之相匹配的,则执行该 case
块中的代码。如果没有一个 case
常量与表达式的值相匹配,则执行 default
块。
通常,default
块放在末尾,也可以省略不写(但不推荐),如果没有相匹配的 case
语句,也没有 default
语句,则什么也不执行。
break
表示跳出当前结构。case
分支语句末尾一定要记得写break
语句。
如果多个case
标签的块中执行内容一样,可以简写成:
switch(表达式) {
case 值1:
case 值n:
case 值n+1:
//statement list 1
break;
case 值2:
//statement list 2
break;
…
case 值n-1:
//statement list n-1
break;
default:
//statement list n
break;
}
嵌套switch语句
嵌套switch
语句与嵌套if
语句思路一样。外部 switch
语句和内部 switch
语句的 case
常量不会产生冲突
语法格式为:
switch(表达式) {
case 值1:
switch(){
case 值1:
//statement list 1
break;
...
default:
//statement list 2
break;
}
case 值2:
//statement list 3
break;
...
default:
//statement list n
break;
}
在对同一个变量的不同值作条件判断时,既可以使用 switch
语句,也可以使用 if
语句。使用 switch
语句的效率更高一些,尤其是判断的分支越多,越明显。