让程序有选择的执行,分支控制有三种
1)单分支
2)双分支
3)多分支
一.单分支结构
√基本语法
if (条件语句)
{
代码块;
}
说明:当条件表达式为true时,就会执行{}的代码。如果为false,就不执行。特别说明,如果{}中只有一条语句,则可以不用{},建议写上{}
import java.util.*;
public class DemoIf {
public static void main(String[] args) {
String ans;
System.out.println("是否关羽把守华容道? 是:y,否:n");
Scanner in= new Scanner(System.in);
ans = in.next();
if(ans.equals("y")) {
System.out.println("曹操逃跑了!");
}
System.out.print("曹操死了!");
}
}
二.双分支结构
if (判断条件){
执行语句1:
}
else{
执行语句2;
}
说明:当条件表达式成立,即执行代码块1,否则执行代码块2,如果执行代码块 只有一条语句,则{}可以省略,否则,不能省略
import java.util.Scanner;
public class DemoIfElse {
public static void main(String[] args) {
String ans;
System.out.println("是否关羽把守华容道? 是:y,否:n");
Scanner in= new Scanner(System.in);
ans = in.next();
if(ans.equals("y")) {
System.out.println("曹操逃跑了!");
}else {
System.out.print("曹操死了!");
}
System.out.println("获得新成就!");
}
}
package mypackage;
import java.util.*;
public class Homework02 {
public static void main(String[] args) {
String Username,tel;
float fee;
float balance;
System.out.print("请输入姓名:");
Scanner in=new Scanner(System.in);
Username=in.next();
System.out.print("请输入手机电话:");
tel=in.next();
System.out.print("请输入您的话费余额:");
balance=in.nextFloat();
if(balance<5) {
System.out.print("请输入充值金额");
fee=in.nextFloat();
System.out.print("您好,用户"+Username+","+"您的手机"+tel+"充值后的余额为:"+(fee+balance));
}else {
System.out.print("暂无需充值");
}
}
}
三.多分支结构
说明:1.当条件表达式1成立时,即执行代码块1
2.如果表达式1不成立,才去判断表达式2是否成立
3.如果表达式2成立,就执行代码块2
4.以此类推,如果所有的表达式都不成立
5.则执行else的代码块,注意,只能有一个执行入口
package chapter02;
import java.util.*;
public class Homework07 {
public static void main(String[] args) {
//超市促销程序
Scanner in=new Scanner(System.in);
System.out.print("花费金额为:");
double money=in.nextDouble();
if(money>=100) {
System.out.printf(String.format("打折后商品价格为:%.2f",money*0.8 ));
}else if(money<100&&money>=50) {
System.out.printf(String.format("打折后商品价格为:%.2f",money*0.9 ));
}else if(money<50) {
System.out.printf(String.format("打折后商品价格为:%.2f",money ));}
else {
System.out.printf("输入金额错误,请重新输入。");
}
}
}
package chapter02;
import java.util.*;
public class DemoIfElseIfElse {
public static void main(String[] args) {
String dongFeng,guanYu;
Scanner in =new Scanner(System.in);
System.out.print("是否借来了东风?是输入y,不是输入n:");
dongFeng=in.next();
System.out.print("是不是关羽把守华容道?是输入y,不是输入n:");
guanYu=in.next();
if (dongFeng.equals("n")) {
System.out.print("曹操获胜");
}else if (guanYu.equals("y")) {
System.out.println("曹操逃跑了!");
}else {
System.out.println("曹操死了!");
}
}
}
特别说明:(1)多分支 可以没有else,如果所有的条件表达式都不成立,则一个执行入口都没有(2)如果else,如果所有的条件表达式都不成立,则默认执行else代码块
四.嵌套分支
在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外层分支。规范:不要超过3层
·基本语法
if(){
if(){
//if-else
}else{
//if-else
}
}
package chap5;
import java.util.*;
public class NestExercise {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请选择一个月份(其中4-10为旺季,其余月份为淡季):");
int month=in.nextInt();
System.out.println("请输入您的年龄:");
int age=in.nextInt();
if(month>=4 && month<=10) {
if(age>=18 && age<=60) {
System.out.println("您的票价为:60");
}
if(age<18) {
System.out.println("您的票价为30");
}
if(age>60) {
System.out.println("您的票价为20");
}
}
if(month<4 && month>10) {
if(age>=18) {
System.out.println("您的票价为40");
}
if(age<20) {
System.out.println("您的票价为20");
}
}
}
}
四.switch结构
·基本语法
switch(表达式){
case 常量1;
语句块1;
break;
case 常量2;
语句块2;
break;
....
case 常量n;
语句块n;
break;
default:
default语句块;
break;}
package chapter02;
import java.util.*;
public class DemoSwitch {
public static void main(String[] args) {
// TODO Auto-generated method stub
String goodsName;
float price;
System.out.print("输入商品名(手机、电池、巧克力、钢笔、笔记本):");
Scanner in = new Scanner(System.in);
goodsName = in.next();
switch(goodsName) {
case "手机":price = 3500f;break;
case "电池":price=11.5f;break;
case "巧克力":price=22.35f;break;
case "钢笔":price=36.78f;break;
case "笔记本":price=5f;break;
default:price = -1f;break;
}
if (price < 0 ) {
System.out.println("没有查到该商品");
}else {
System.out.println(goodsName+"的价格为"+price+"元");
}
}
}
1.switch关键字,表示switch分支
2.表达式 对应一个值
3.case 常量1:当表达式的值等于常量1,就执行 语句块1
4.break:表示退出switch
5.如果和case常量1 匹配,就执行语句块1,如果没有匹配,就继续匹配匹配 case常量2
6.如果一个都没有匹配上,执行default
流程图
细节:
1.表达式数据类型,应和case后的常量类型一致,或者是可以自动转成可以相互转化比较的类型,比如输入的是字符,而常量是int
2.switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum,String)
3.case子句中的值必须是常量,而不能是变量
4.default子句是可选的,当没有匹配的case时,执行default
5.break语句用来执行完一个case分支后使程序跳出switch语句块;如果没有写break,程序会顺序执行switch结尾,除非遇到break;