流程控制--选择结构与循环结构
1、流程控制结构:顺序结构、选择结构和循环结构
1)、顺序结构:程序从上向下依次执行每条语句的结构;
2)、选择结构:根据条件判断的结果来选择执行不同的代码;
有if控制语句和switch语句
3)、循环结构:根据判断条件来重复性地执行某段代码;
有while语句、do-while语句、for语句
2、选择结构有if控制语句和switch语句
1)、if控制语句有3种不同的形式,分别为单分支结构、双分支结构和多分支结构
A、单分支结构:
if(表达式){
语句;
}
a、if为关键字;
b、表达式为布尔类型的表达式,结果为true或false;
B、双分支结构:
if(表达式){
语句1;
}else{
语句2;
}
执行步骤:
对表达式进行判断,结果为true,则执行语句1;反之执行语句2;
PS:else子句不能单独使用,必须是IF语句的一部分,与最近的if语句配对使用;else后可再进行if语句,进行多分支选择
C、使用复杂条件的IF选结构
结合运算符的优先级编写条件:
a、最高的优先级:();
b、最低的优先级:=;
c、优先级:!>算术运算符>关系运算符>&&>||
d、复杂条件使用括号提高可读性
2)、switch语句
A、语法格式
switch(){
case 常量1:
语句;
break;
case 常量1:
语句1;
break;
case 常量1:
语句2;
break;
default:
语句3;
}
注:1、switch、case、break、defaultj为JAVA关键字;
2、switch后的表达式只能是整型、字符型或枚举类型;
3、case用于与表达式进行匹配;
4、default是可选的,当其他条件都不匹配时执行default;
3、作业
A、假如你准备去海南旅游,现在要订购机票。机票价格受季节旺季、淡秀影响,而且头等舱和经济舱价格也不同。假设机票原价为5000元,4~10月为旺秀,旺秀头等舱打9折, 经济舱打6折,其他月份为淡季,头等舱打5折,经济舱打4折。请编写程序,根据出行的月份和选择的舱位输出实际价格。
import java.util.Scanner; //计算淡旺秀出行的机票价格 public class JiPiao { public static void main(String[] args) { Scanner cxj = new Scanner(System.in); int yuanjia = 5000; System.out.println("请选择您要出行的月份:"); int yuefen = cxj.nextInt(); System.out.println("请问您需要头等舱还是经济舱? "+"头等舱输入1"+" 经济舱输入2"); System.out.print("请输入:"); int cang = cxj.nextInt(); if(yuefen>=4&&yuefen<=10) { if(cang==1) { System.out.println("您的机票价格为:"+yuanjia*0.9); }else { System.out.println("您的机票价格为:"+yuanjia*0.6); } }else if(cang==1){ System.out.println("您的机票价格为:"+yuanjia*0.5); }else { System.out.println("您的机票价格为:"+yuanjia*0.4); } } }
结果示例:
B、赌色子游戏,三个色子赌大小
package com.java12_26; import java.util.Scanner; //3、4、5、6、7、8、9、10、11、12、13、14、15、16、17、18,假设三个筛子的数之和<=10为小,反之为大 public class ShaiZi_DaXiao { public static void main(String[] args) { Scanner cxj = new Scanner(System.in); int money = 10000; System.out.println("请问您是否要进行开盘?y/n"); String kaipan = cxj.next(); if(kaipan.equals("y")) { int a = (int)(Math.random()*6+1); int b = (int)(Math.random()*6+1); int c = (int)(Math.random()*6+1); int sum = a+b+c; System.out.println("请您下注:"); int xiazhu = cxj.nextInt(); System.out.println("您压大压小?"); String daxiao = cxj.next(); System.out.println("开:"+a+","+b+","+c+";"+sum); if(sum<=10) { if(daxiao.equals("小")) { System.out.println("是小,恭喜您压对了"); money +=xiazhu; }else { System.out.println("报歉您压错了"); money -=xiazhu; } System.out.println("余额:"+money); }else { if(daxiao.equals("大")) { System.out.println("是大,恭喜您压对了"); money +=xiazhu; }else { System.out.println("报歉您压错了"); money -=xiazhu; } System.out.println("余额:"+money); } }else { System.out.println("感谢您的光顾,请慢走!"); } } }
示例结果为:
C、switch实现周一、三、五预习;周二、四、六复习;周七休息
import java.util.Scanner; //1、3、5预习,2、4、6复习,7复习 public class XingQi { public static void main(String[] args) { Scanner cxj = new Scanner(System.in); System.out.println("您想查询周几的课程?请输入:"); int zhouji= cxj.nextInt(); if(zhouji>=1&&zhouji<=7) { switch(zhouji) { case 1: case 3: case 5: System.out.println("请预习明天的课程!"); break; case 2: case 4: case 6: System.out.println("请复习功课!"); break; default: System.out.println("今天休息,可以放松下心情"); } }else { System.out.println("您的输入有误!"); } } }
示例结果:
4、异常问题记录
例:100米比赛成绩在10秒以内的可以分别进入男、女组决赛,编写程序实现。
public class JueSai { public static void main(String[] args) { int score = 8; String sex = null; if(score<10) { if(sex.equals("男")) { System.out.println("恭喜你进入男子组决赛!!"); }else { System.out.println("恭喜你进入女子组决赛!!"); } }else { System.out.println("报歉,你的成绩无法进入决赛!!"); } } }
结果会显示空指针异常:
空指针异常:java.lang.NullPointerException
String sex = null;
if(sex.equals("男“))这一句出现空指旬异常,因为sex为空
出现原因:使用值为null的变量调用了方法
解决方案:给该为null的变量赋值;或者使用不为null的变量来调用方法
总结:在使用方法时,要用不太可能为null的变量来调用方法,可以避免空指针异常
解决方法1:把equals左右两个操作数对换,用常来调用方法,这样if("男".equals(sex))结果为FALSE
public class JueSai { public static void main(String[] args) { int score = 8; String sex = null; if(score<10) { if("男".equals(sex)) { System.out.println("恭喜你进入男子组决赛!!"); }else { System.out.println("恭喜你进入女子组决赛!!"); } }else { System.out.println("报歉,你的成绩无法进入决赛!!"); } } }
结果为:
解决方法2:直接输入赋值
import java.util.Scanner; public class JueSai { public static void main(String[] args) { Scanner cxj = new Scanner(System.in); System.out.println("请输入学生的跑步成绩:"); int score = cxj.nextInt(); System.out.println("请输入学生的性别:"); String sex = cxj.next(); if(score<10) { if(sex.equals("男")) { System.out.println("恭喜你进入男子组决赛!!"); }else { System.out.println("恭喜你进入女子组决赛!!"); } }else { System.out.println("报歉,你的成绩无法进入决赛!!"); } } }
结果示例:
预习重点:
1、循环的语法
A、while循环语句语法
变量初始化
while(循环条件){
循环体;
修改循环变量;
}
B、do-while循环语句语法
变量初始化
do{
循环体;
修改循环变量;
}(循环条件);
C、for循环语句语法
for(变量初始化;循环条件;修改循环变量){
循环体;
}
2、各自的特点
A、while循环:先判断循环条件,再执行循环体。如果条件不成立,退出循环。
B、do-while循环:先执行循环体,再判断循环条件,循环体至少执行一次
C、for循环:先执行变量初始化部份,再判断循环条件,然后再执行循环体,最后进行循环变量的计算。如果条件不成立,跳出循环。在循环次数确定的情况下,优先选用for循环。
3、循环结构的几个要素
变量初始化、循环体、循环条件、修改循环变量