流程控制--选择结构与循环结构
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("请问您需要头等舱还是经济舱?\n"+"头等舱输入1"+"\t经济舱输入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、循环结构的几个要素
变量初始化、循环体、循环条件、修改循环变量