一个程序的运行结果和它的执行顺序密切相关,在编程中程序员通常会使用一些特定的代码来控制程序的执行顺序从而达到特定的功能,这就是所谓的流程控制结构。流程控制结构可以分为顺序解构、选择判断结构和循环结构。
顺序结构是指程序按照代码的顺序从上到下,从左到右依次执行的代码结构。平时写的代码不使用循环结构和选择结构的话就是属于这一类,并不是学习的重点,而选择判断结构和循环结构才是需要重点关注的对象。
选择判断结构
选择判断结构是指程序能够根据不同的条件来选择执行不同的代码的结构,主要是switch语句和if语句两种。
switch语句
switch语句的作用原理其实可以通过一个非常简单的实例来进行解读,这个实例就是飞行棋。在飞行棋中,游戏者的每一步行动都是由投出去的骰子的点数决定的。如果将骰子的每一个点数都定义为一种情况,也就是switch语句中的case,那么一共有情况一、情况二、情况三、情况四、情况五、情况六这六种情况。可以定义情况一:向前走两步;情况二:向后走两步;情况三:回到原点;情况四:遇到突发情况,回到原点;情况五:遇到障碍,原地不动;情况六:回家吃饭,游戏结束。这样当骰子投出不同的点数时就需要做出不同的行为,只是在java中,这个骰子的点数有很多种情况而已。
swith语句的格式可以表述为:
switch(){
case 值1:
语句体1;
break;
case 值2:
语句体2;
break;
…….
default:
语句体n+1;
break;
}
如此,就可以通过switch来实现上面的飞行棋小游戏,如下面的程序:
/**
* 用swith语句实现飞行棋小游戏
*/
public class FeiXingQi {
public static void main(String[] args) {
System.out.println("游戏开始");
int i = (int)(Math.random()*6)+1;//生成1到6的随机整数用以模拟投骰子的结果,
// 其中Math.random()表示成成[0,1)的随机数,(int)表示强制转型
switch(i){
case 1 :
System.out.println("向前走两步");
break;
case 2 :
System.out.println("向后走两步");
break;
case 3 :
System.out.println("回到原点");
break;
case 4 :
System.out.println("遇到突发情况,回到原点");
break;
case 5:
System.out.println("遇到障碍,原地不动");
break;
case 6 :
System.out.println("回家吃饭,游戏结束");
break;
default :
System.out.println("无效的数值");
break;
}
}
}
这里需要注意的是,每一种case的语句体下方都要注意是否写了break,如果没有写break,那么程序会继续执行下一种情况,直到遇到break语句,比如下面的程序中,case2、case3没有break语句,那么当输入2的时候,程序会执行case2、case3,然后执行case4,遇到case4中的break语句后才会停止。而default是指除了已有的情况之外的情况,比如一年只有12个月,那么当我输入13时,下面的程序就不会执行case1到case12的所用情况,而是执行default后面的语句体。同时能够注意到,case的顺序并不需要固定从上到下,比如这个判断月份的程序中,case1就放到了case12后面。
/**
* 用程序判断一年当中每个月所属的季节,用以演示switch语句的使用
*/
import java.util.Scanner;//导包,声明需要使用Scanner函数
public class SwitchDemo01 {
public static void main(String[] args){
System.out.print("请输入需要判断的月份:");
Scanner mu = new Scanner(System.in);
System.out.print("请输入需要判断的月份:");
Scanner mu1 = new Scanner(System.in);
int mouth1 = mu.nextInt();
switch(mouth1){
case 2:
case 3:
case 4:
System.out.println(mouth1+"月是春季");
break;
case 5:
case 6:
case 7:
System.out.println(mouth1+"月是夏季");
break;
case 8:
case 9:
case 10:
System.out.println(mouth1+"月是秋季");
break;
case 11:
case 12:
case 1:
System.out.print(mouth1+"月是冬季");
break;
default :
System.out.println("一年只有12个月,输入错误");
}
}
}
if语句
java中的if语句有三种格式,分别是if格式,if-esle格式以及if-else if 格式。
if格式
if格式是三种if语句中最简单的一种,它的格式为:
if (关系表达式){
//语句体
}
括号里的关系表达式的结果为boolean类型,只有当关系表达式的值为true时才会执行语句体,其用法如以下程序所示:
import java.util.Scanner;//导包,声明需要使用Scanner函数
public class IfDemo01 {
public static void main(String[] args){
System.out.print("请输入需要判断的月份:");
Scanner mu = new Scanner(System.in);
int mouth = mu.nextInt();
if(mouth==2|mouth==3|mouth==4){
System.out.println(mouth+"月是春季");
}
if(mouth==5|mouth==6|mouth==7){
System.out.println(mouth+"月是夏季");
}
if(mouth==8|mouth==9|mouth==10){
System.out.println(mouth+"月是秋季");
}
if(mouth==11|mouth==12|mouth==1){
System.out.println(mouth+"月是冬季");
}
if(mouth>12|mouth<1){
System.out.println("一年只有12个月,输入错误");
}
if-else格式
这种格式的if语句的格式可以写为:
if (关系表达式){
//语句体1
}
else{
//语句体2
}
它可以理解为逻辑学中的二分法,用汉语来表达就是,如果关系表达式成立那么结果就是语句体1,不然结果就是语句体2。以下用一个例子来演示其用法:
/**
* 判断半径小于4的圆的面积和周长的关系,以演示选择判断结构中if else结构的用法
*/
public class IfElseDemo01 {
public static void main(String[] args){
double r = Math.random()*4;//随机生成[0,4)的随机数,表示半径
double area = Math.PI*r*r;
double circle = 2*Math.PI*r;
System.out.println("半径:"+r+'\n'+"面积:"+area+'\n'+"周长:"+circle);
if(area>=circle){
System.out.println("面积数值大于或等于周长数值");
}
else{
System.out.println("面积数值小于周长数值");
}
}
}
if-else if格式
相对于if-else 结构只能表述两种情况,这种结构针对的是多种情况的表述,它的结构可以表述为:
if (关系表达式1){
//语句体
}
else if (关系表达式2){
//语句体2
}
…….
else {
//语句体n+1
}
从以上结构不难看出,这种结构的逻辑思维很像枚举法,就是将一个大的集合分成很多个小的集合,然后将每种小集合对应的情况都表述出来。以下为编程用法举例:
/**
* 用if else -if else 结构判断人的年龄一演示其使用
*/
public class If_Elsedemo {
public static void main(String[] args){
int age = (int)(100*Math.random());//随机生成1到100之间的整数,用以模拟人的年龄
System.out.print("年龄:"+age+"属于");
if(age<15){
System.out.println("儿童");
}
else if(age<30){
System.out.println("青年");
}
else if(age<45){
System.out.println("中年");
}
else if(age<70){
System.out.println("老年");
}
else{
System.out.println("老寿星");
}
}
}