流程控制
Java中的流程控制有三类:顺序控制、选择控制和循环控制
顺序控制语句
在Java中的程序的执行流程:
从main方法开始执行,从main方法的方法体的第一句开始执行,依次按照语句的先后顺序:从上而下 逐句执行。
选择控制语句(1)
在程序的执行过程当中,在某些时候,我们对代码的执行,需要在满足一定的条件之后才去执行。
在Java如何来表示这些条件呢?
选择结构的第一种表示形式
if(条件表达式/布尔表达式){
执行语句;
}
选择结构的第二种表示形式
if(条件表达式/布尔表达式){
语句1;
}else{
语句2;
}
选择结构的第三种表示形式
if(条件表达式1){
语句1;
}else if(条件表达式2){
语句2;
}else if(条件表达式3){
语句3;
}
...
选择结构的第四种表示形式
if(条件表达式1){
语句1;
}else if(条件表达式2){
语句2;
}else if(条件表达式3){
语句3;
}
...
else{
}
选择结构的第五种表示形式
if(条件表达式1){
if(条件表达式1-1){
语句1-1;
}else if(条件表达式1-2){
语句1-2;
}
}else if(条件表达式2){
if(条件表达式2-1){
语句2-1;
}else if(条件表达式2-2){
语句2-2;
}else{
}
}else{
}
总结:
针对Java中的选择结构 if
基本形式:
if(条件表达式){
}else if(){
}else{
}
在以上的三个大括号之间 可以出现我们所接触过的任何的代码,包括我们 if 的五种结构的任意一种或多种。if 可以单独出现,但是else绝对不能单独出现,必须和if一起出现。
/*
程序是针对特定的问题 给出特定的解决方案
程序所结局的问题就成为程序的需求
需求1 在学生考试中,如果成绩达到60 则视为考试合格
代码书写规范:
1 在代码编写过程中,所有的标识符的命名必须严格按照Java中的标识符的命名规则来进行命名;
2 对于标识符的命名,需要做到见名知意;
3 除成员 变量 的声明语句之外的所有的语句都必须写在方法的内部;
4 程序的结构一定要足够良好:如果当前语句在的上一级有大括号,
那么当前语句就应当比上一级缩进一个tab键
5 大括号需要成对出现:再写代码的过程中, 一般先写代码的结构,然后再去填充结构中所需要的代码;
6 在所有的表达式中,运算符的两端与操作数之间需要预留一个空格的位置
需求2:在学生考试中,如果成绩达到60 则视为考试合格 否则 很遗憾 你要参加补考了
需求3:对考试成绩进行分类评定
100 -- 90 优秀
80--90 良好
60 -- 80 合格
> 60 不合格
*/
public class IfDemo1{
public static void main(String[] args){
//int score = 82;
/*在学生考试中,如果成绩达到60 则视为考试合格
if(score >= 60){
System.out.println("成绩合格!");
}
*/
/*
在学生考试中,如果成绩达到60 则视为考试合格 否则 很遗憾 你要参加补考了
*/
/*
if(score >= 60){
System.out.println("恭喜你,你的考试通过了!");
}else{
System.out.println("很遗憾,你需要参加补考了!");
}
*/
/*
需求3:对考试成绩进行分类评定
100 -- 90 优秀
80--90 良好
60 -- 80 合格
> 60 不合格
*/
/*
if( score <=100 && score >=90){
System.out.println("优秀");
}else if(score< 90 && score >=80){
System.out.println("良好");
}else if(score < 80 && score >=60){
System.out.println("合格");
}else if (score < 60){
System.out.println("不合格");
}*/
/*
if( score <=100 && score >=90){
System.out.println("优秀");
}else if(score< 90 && score >=80){
System.out.println("良好");
}else if(score < 80 && score >=60){
System.out.println("合格");
}else{
System.out.println("不合格");
}
*/
/*
需求4:对考试成绩进行分类评定 成绩必须在0--100之间
如果成绩超出了0--100的范围 则提示用户 输入的成绩非法
100 -- 90 优秀
80--90 良好
60 -- 80 合格
> 60 不合格
自行完成需求5: 针对人的年龄(0--120),
0 --5 儿童
5--18 少年
18--30 青年
30--60 中年
60 --120 老年
*/
/*
if(score <= 100 && score >0){
if( score <=100 && score >=90){
System.out.println("优秀");
}else if(score< 90 && score >=80){
System.out.println("良好");
}else if(score < 80 && score >=60){
System.out.println("合格");
}else{
System.out.println("不合格");
}
}else{
System.out.println("你的成绩不合法,请确认你的成绩");
}
*/
/*
获取用户从键盘输入的内容:
*/
//int score;
//获取用户键盘输入的值:
//java.util.Scanner sc = new java.util.Scanner(System.in);
// 从键盘输入的值,一类是我们的基本数据类型 二类引用类型 String
// sc.nextInt(); 代表从键盘输入一个整数
// sc.next();代表从键盘输入一个字符串
/*System.out.println("请输入您的成绩:");
score = sc.nextInt();
if(score <= 100 && score >0){
if( score <=100 && score >=90){
System.out.println("优秀");
}else if(score< 90 && score >=80){
System.out.println("良好");
}else if(score < 80 && score >=60){
System.out.println("合格");
}else{
System.out.println("不合格");
}
}else{
System.out.println("你的成绩不合法,请确认你的成绩");
}
*/
/*
从键盘输入字符串
需求6:从键盘输入账号和密码 如果账号是admin 密码是123456 则认为
用户是注册用户 而且账号和密码正确,正常登录,提示登陆成功,否则提示
账号或密码错误。
*/
/*java.util.Scanner sc = new java.util.Scanner(System.in);
String username ;
String password;
System.out.println("请输入您的账号:");
username = sc.next();
System.out.println("请输入您的密码:");
password = sc.next();
if(username.equals("admin") && password.equals("123456")){
System.out.println("登陆成功");
}else{
System.out.println("您输入的账号或密码错误");
}*/
/*
需求7:今天要出门 :如果天下雨 需要带雨伞 下雨 0 不下雨 1
如果不下雨 0 代表男生 1 代表女生
如果是男生 则带墨镜
如果是女生:需要涂防晒霜
*/
/*
int weather ;
int sex;
java.util.Scanner sc = new java.util.Scanner(System.in);
System.out.println("请输入今天的天气情况(0-下雨 1-晴天)");
weather = sc.nextInt();
if(weather == 0){
System.out.println("请出门时记得带上雨伞!");
}else if(weather == 1){
System.out.println("请输入您的性别");
sex = sc.nextInt();
if(sex == 0 ){
System.out.println("今天天气不错,戴上墨镜 ,出去约个会");
}else if(sex == 1){
System.out.println("今天天气太晒,涂点防晒霜 ,出去约个会");
}else{
System.out.println("你是不搞错了,你的性别有问题");
}
}*/
/*
针对需求二:做一个更改
如果成绩大于等于60 就是合格 如果小于60 不合格
if(score >= 60){
System.out.println("恭喜你,你的考试通过了!");
}else{
System.out.println("很遗憾,你需要参加补考了!");
}
*/
int score = 50;
if(score >= 60){
;//这个也是一条语句 空语句 什么都不做
System.out.println("恭喜你,你的考试通过了!");
}
else{
System.out.println("很遗憾,你需要参加补考了!");
}
}
}
选择控制语句(2)
switch结构:
switch(表达式){
case 值1:
语句1;
break;
case 值2:
语句2;
break;
...
default:
语句n+1;
break;
}
在switch后的表达式的类型byte、short、int、char。jdk5 引入一个新的类型:枚举,jdk7 引入一个新的类型:String
需求1:一星期有7天,让用户从键盘输入一个整数,1--7对应我们的星期一到星期天
public class SwitchDemo1{
public static void main(String[] args){
int week = 0;
java.util.Scanner sc = new java.util.Scanner(System.in);
System.out.println("请输入你要查询的数字(1--7):");
week = sc.nextInt();
switch(week){
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;
case 7:
System.out.println("星期日");
break;
default:
System.out.println("您的输入有误,请输入1--7之间的数字。");
break;
}
}
}
注意事项:
1、break 的作用:防止 switch 穿透的出现; break; 就是针对当前值执行之后结束整个 switch 的判断;
2、case 后面的值不允许重复;
3、default 可以出现在 switch 中的任意位置而且在default之后也必须加上break;
需求2:一年有12个月 按照月份,将一年分为了四季,让用户从键盘输入一个月份值,然后通过程序来判断当前月份属于哪一个季节?
/*
需求2:一年有12个月 按照月份,将一年分为了四季
12 1 2 冬季
3 4 5 春季
6 7 8 夏季
9 10 11 秋季
让用户从键盘输入一个月份值,然后通过程序来判断当前月份属于哪一个季节?
*/
import java.util.Scanner;
public class SwitchDemo2{
public static void main(String[] args){
//从键盘获取用户输入
Scanner sc = new Scanner(System.in);
int month = 0 ;
System.out.println("请输入你要查询的月份:");
month = sc.nextInt();
switch(month){
case 12:
case 1:
case 2:
System.out.println("冬季");
break;
case 3:
case 4:
case 5:
System.out.println("春季");
break;
case 6:
case 7:
case 8:
System.out.println("夏季");
break;
case 9:
case 10:
case 11:
System.out.println("秋季");
break;
default:
System.out.println("您的输入有误,请输入正确的月份值!");
}
}
}
在switch中,如果多个case对应的情况是相同的,那么就没有必要在每一个case后面都写上对应的处理,只需要在相同的case的最后一个case之后写上共同的处理语句就可以了,同样break不能省略。
需求:通过程序查询 一 到十 所对应的繁体字
import java.util.Scanner;
public class SwitchDemo3{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("请输入你要查询的数字对应的汉字:");
String num = "";
num = sc.next();
switch(num){
case "一":
System.out.println("壹");
break;
case "二":
System.out.println("贰");
break;
case "三":
System.out.println("叁");
break;
case "四":
System.out.println("肆");
break;
case "五":
System.out.println("伍");
break;
case "六":
System.out.println("陆");
break;
case "七":
System.out.println("柒");
break;
case "八":
System.out.println("捌");
break;
case "九":
System.out.println("玖");
break;
case "十":
System.out.println("拾");
}
}
}
if和switch的区别以及其应用的场景:
区别:if 针对的 boolea 值进行判断, if 判断的是一个范围;switch 针对的是一些特定的值而且这些是可列举的(case的情况是有限的)
联系:凡是能够使用switch的 一定能够使用 if; 但是能使用 if 的不一定能使用switch
需求:剪刀、石头、布 让用户从键盘输入一个对应的数字,那么这个数组就对应着我们的剪刀、石头、布 中的一种当用户选择完成之后,我们需要针对用户的选择做出相应的判决
/*
需求:剪刀、石头、布 让用户从键盘输入一个对应的数字,那么这个数组就对应
着我们的剪刀 石头 布中的一种
当用户选择完成之后,我们需要针对用户的选择 做出相应的判决
*/
import java.util.Scanner;
public class SelectDemo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
System.out.println("游戏开始");
int first =0;
int second = 0;
System.out.println("请第一位选手做出选择(1-3)1:剪刀 2:石头 3 布:");
first = sc.nextInt();
switch(first){
case 1:
System.out.println("你所选择是:剪刀");
break;
case 2:
System.out.println("你所选择是:石头");
break;
case 3:
System.out.println("你所选择是:布");
break;
}
System.out.println("请第二位选手做出选择(1-3)1:剪刀 2:石头 3 布:");
second = sc.nextInt();
switch(second){
case 1:
System.out.println("你所选择是:剪刀");
break;
case 2:
System.out.println("你所选择是:石头");
break;
case 3:
System.out.println("你所选择是:布");
break;
}
System.out.println("你们的结果为:");
if(first == 1 && second == 3 || first == 2 && second ==1 || first == 3 && second == 2 ){
System.out.println("第一位选手获胜");
}else if(second == 1 && first == 3 || second == 2 && first ==1 || second == 3 && first == 2){
System.out.println("第二位选手获胜");
}else{
System.out.println("平局");
}
}
}