4.2分支控制
让程序有选择的支行,分支控制有三种:
1、单分支 2、双分支 3、多分支
4.2.1 if语句
☆双分支
if语句:
if(条件表达式)
{
语句;
}else
{
语句;
}
☆多分支
if语句:
if(条件表达式)
{
语句;
}else if(条件表达式)
{
语句;
}else
{
语句;
}
思考题:
编写一个程序,可以输入人的年龄,如果该人的年龄大于等于18岁,则输出“你的年龄大于等于18,要为自己的行为负责!”
分析:
第一步:
在控制台输入字符
第二步:
判断控制台的输入字符,进行相应操作
可以从题目中看出,基本就是两个情况,如下:
1、年龄小于18岁,未成年人
2、年龄大于等于18岁,输出信息
代码如下:
/*
作者:李俊挥
日期:2013-12-2
功能:判断输入的年龄大小,进行分支控制输出
*/
import java.io.*;
public class Demo
{
public static void main(String []args)
{
//执行控制台输入,必须要抛出异常
try{
//定义控制台输入获取方法
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
//获取输入的字符
System.out.println("输入你的年龄");
String s=br.readLine();
//转换类型,String->int
int age;
age=Integer.parseInt(s);
//测试获取数据
//System.out.println("age="+age);
//分支判断
if(age<18){
System.out.println("你还未成年");
}else{
System.out.println("你已经是成年人,要为自己的行为负责!");
}
}catch(Exception e){
e.printStackTrace();
}
}
}
//end
思考题:
程序执行多分支的时候,是否只要满足其中一个分支的条件,就不再进行后面的分支?
注意:当然按照从上到下,从左到右的执行顺序
思路:
1、定义int a=100
2、编写if语句,使得a都满足多个分支的条件,看输出哪些语句
代码如下:
/*
作者:李俊挥
日期:2013-12-2
功能:输入的年龄大小,判断多分支控制的执行结果
*/
import java.io.*;
public class Demo
{
public static void main(String []args)
{
//执行控制台输入,必须要抛出异常
try
{
//定义控制台输入获取方法
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
//获取输入的字符
System.out.println("输入你的年龄");
String s=br.readLine();
//转换类型,String->int
int age;
age=Integer.parseInt(s);
//测试获取数据
//System.out.println("age="+age);
//分支判断
if(age>1)
{
System.out.println("age>1");
}else if(age>10)
{
System.out.println("a>10");
}else if(age>18)
{
System.out.println("a>18");
}
}catch(Exception e)
{
e.printStackTrace();
} //try catch
}//main
}//Demo
//end
4.2.2 switch语句
switch语句:
switch(条件表达式)
{
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
……
case 常量n:
语句n;
break;
default:
语句;
break;
}//switch
//条件表达式数据类型,应该和case的常量类型一致
注意:
Switch中的可用数据类型主要是:
允许byte、short、int、char、enum等
思考题:
编写一个程序,该程序可以接受一个字符,比如:a,b,c,d,e,f,g
A表示星期一,b表示星期二……
根据用户输入显示相依的信息
分析:
1、从控制台获取相依的字符
2、根据switch判断输入的字符
代码:
/*
***********************************************************************
作者:李俊挥
日期:2013-12-2
功能:输入的字符,根据switch根据输入字符a,b,c,d,e,f,g
输入:a表示星期一,b表示星期二……
***********************************************************************
*/
import java.io.*;
public class Demo
{
public static void main(String []args)
{
//执行控制台输入,必须要抛出异常
try{
//定义控制台输入获取方法
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
//获取输入的字符
System.out.println("输入abcdefg,其中一个字符,按回车结束:");
String s=br.readLine();
//转换类型,String->char
char[] strChar;
//一定要定义数据的下标,不然只输入一个字符的话就会报错
strChar = new char[1];
strChar = s.toCharArray();
char flag;
flag = strChar[0];
//测试获取数据
//System.out.println("s="+s);
//System.out.println("strChar[0]="+strChar[0]);
//System.out.println("flag="+flag);
//分支判断
//注意case必须是常量,所以字符必须加单引号'',才不会报错
switch(flag)
{
case 'a':
System.out.println("星期一");
break;
case 'b':
System.out.println("星期二");
break;
case 'c':
System.out.println("星期三");
break;
case 'd':
System.out.println("星期四");
break;
case 'e':
System.out.println("星期五");
break;
case 'f':
System.out.println("星期六");
break;
case 'g':
System.out.println("星期日");
break;
default:
System.out.println("未定义字符");
break;
}
}catch(Exception e){
e.printStackTrace();
} //try catch
}//main
}//Demo
思考题:
如果在switch语句中不写break,会不会像if语句只执行一个分支呢?
分析:
刚上面的代码去除break,运行一遍。
代码:
/*
***********************************************************************
作者:李俊挥
日期:2013-12-2
功能:注释去掉switch语句中的break,验证是否只执行一个分支
***********************************************************************
*/
import java.io.*;
public class Demo
{
public static void main(String []args)
{
//执行控制台输入,必须要抛出异常
try{
//定义控制台输入获取方法
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
//获取输入的字符
System.out.println("输入abcdefg,其中一个字符,按回车结束:");
String s=br.readLine();
//转换类型,String->char
char[] strChar;
//一定要定义数据的下标,不然只输入一个字符的话就会报错
strChar = new char[1];
strChar = s.toCharArray();
char flag;
flag = strChar[0];
//测试获取数据
//System.out.println("s="+s);
//System.out.println("strChar[0]="+strChar[0]);
//System.out.println("flag="+flag);
//分支判断
//注意case必须是常量,所以字符必须加单引号'',才不会报错
switch(flag)
{
case 'a':
System.out.println("星期一");
//break;
case 'b':
System.out.println("星期二");
//break;
case 'c':
System.out.println("星期三");
//break;
case 'd':
System.out.println("星期四");
//break;
case 'e':
System.out.println("星期五");
//break;
case 'f':
System.out.println("星期六");
//break;
case 'g':
System.out.println("星期日");
//break;
default:
System.out.println("未定义字符");
//break;
}
}catch(Exception e){
e.printStackTrace();
}
}
}
可以从结果中看出,如果去掉break,switch语句就会执行所有分支。
可以看出,分支语句只要按照执行顺序满足了前面的其中一个条件,后面的语句就不会再执行。