文章目录
Java程序流程控制
流程控制语句
Java提供一些流程控制语句,来控制程序的执行流程
三大结构
顺序结构
程序默认流程
分支结构
if分支
根据判定的结果决定执行某个分支的代码
格式1
if(条件表达式){
语句体;
}
格式2
if(条件表达式){
语句体1;
}else{
语句体2;
}
格式3
if(条件表达式1){
语句体1;
}else if(条件表达式2){
语句体2;
}else if(条件表达式3){
语句体3;
}
...
else{
语句体n+1;
}
public static void main(String[] args) {
//需求:心跳(60-100)之间是正常的,否则系统提示进一步检查/格式1
int heart = 30;
if(heart < 60 || heart > 100){
System.out.println("您的心跳数据是: "+heart+",您可能需要进一步检查!");
}
System.out.println("检查结束");
//需求:发红包。格式2
double money = 5999;
//发送一个1314的红包
if(money >= 1314){
System.out.println("您当前发送红包成功");
}else {
System.out.println("您自己都没钱了,就别发了");
}
//坪效系统:0-60 C 60-80 B 80-90 A 90-100 A+,表达式3
int score = 99;
if (score >= 0 && score < 60){
System.out.println("您本月的绩效是: C");
}else if(score >= 60 && score < 80){
System.out.println("您本月的绩效是: B");
}else if(score >= 80 && score < 90){
System.out.println("您本月的绩效是: A");
}else if(score >= 90 && score <=100){
System.out.println("您本月的绩效是: A+");
}else {
System.out.println("您录入的分数有毛病!");
}
}
switch
也是匹配条件去执行分支,适合做值匹配的分支选择,结构清晰,格式良好
执行流程:
1、先执行表达式的值,再拿这个值去与case后的值进行匹配
2、匹配哪个case的值为true就执行哪个case,遇到break就跳出switch分支
3、如果case后的值都不匹配则执行default代码
public static void main(String[] args) {
//周一:埋头苦干,解决bug 周二:请求大牛程序员帮忙 周三:今晚啤酒,小龙虾,烧烤
//周四:主动帮助新来的女程序员解决bug 周五:今晚cs:go 周六:今晚与朋友聚一聚 周日:郁郁寡欢,准备上班
String weekday = "周三";
switch (weekday){
case"周一":
System.out.println("埋头苦干,解决bug");
break;
case"周二":
System.out.println("请求大牛程序员帮忙");
break;
case"周三":
System.out.println("今晚啤酒,小龙虾,烧烤");
break;
case"周四":
System.out.println("主动帮助新来的女程序员解决bug");
break;
case"周五":
System.out.println("今晚cs:go");
break;
case"周六":
System.out.println("今晚与朋友聚一聚");
break;
case"周日":
System.out.println("郁郁寡欢,准备上班");
break;
default:
System.out.println("数据有误!");
}
}
注意事项:
1、表达式类型只能是byte、short、int、char,JDK5开始支持枚举,JDK7支持String、不支持double,float,long。
2、case给出的值不允许重复,且只能是字面量,不能是变量。
3、不要忘记写break,否则会出现穿透现象。
小数运算在Java中是不精确的
switch的穿透性:
如果代码执行到没有写break的case块,执行完后将直接进入下一个case块执行代码(而且不会进行任何匹配),直到遇到break才跳出分支,这就是switch的穿透性
public static void main(String[] args) {
//1,3,5,7,8,10,12月份是31天
//2月份闰年是29天,非闰年是28天
//4,6,9,11月份是30天
int month = 7;
switch (month){
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println(month +"月是31天!");
break;
case 2:
System.out.println(month +"月闰年是29天,非闰年是28天!");
break;
case 4:
case 6:
case 9:
case 11:
System.out.println(month +"月是30天!");
break;
default:
System.out.println("数据有误!");
}
}
循环结构
for
控制一段代码反复执行很多次
格式:
for(初始化语句;循环语句;迭代语句){
循环体语句(重复执行的代码);
}
public static void main(String[] args) {
for (int i = 0 ; i < 3 ; i++){
System.out.println("Hello World");//执行三遍
}
System.out.println("---------");
for (int i = 1 ; i < 3 ; i++){
System.out.println("Hello World");//执行两遍
}
System.out.println("---------");
for (int i = 1 ; i <= 3 ; i++){
System.out.println("Hello World");//执行三遍
}
}
while
初始化语句;
while(循环条件){
循环体语句(被重复执行的代码);
迭代代码;
}
public static void main(String[] args) {
int i = 0;
while (i < 3){
System.out.println("Hello World");
i++;
}
}
什么时候用for循环,什么时候用while循环?
功能上是完全一样的,for循环能解决的事情while也能解决,反之亦然。使用规范是:知道循环几次:使用for;不知道循环几次建议使用:while
//需求:珠穆朗玛峰高度是8848860,纸张厚度是0.1,折叠纸张知道不低于珠穆朗玛峰高度,求折叠几次
public static void main(String[] args) {
double peakHeight = 8848860;
double paper = 0.1;
int count = 0;
while (paper < peakHeight){
paper *= 2;
count ++;
}
System.out.println("折叠的次数: "+count);
System.out.println("纸张最终的厚度: "+paper);
}
do…while
先执行再判断循环条件
初始化语句;
do{
循环体语句;
迭代语句;
}while(循环条件);
public static void main(String[] args) {
int i = 0;
do{
System.out.println("Hello World");
i++;
}while (i < 3);
}
特点:一定会先执行一次循环体。
eg:抢票
三种循环的区别
1、for 和 while (先判断后执行),do…while (第一次执行后判断)
2、for循环和while循环的执行流程是一模一样的,如果已知循环次数使用for循环,如果不清楚循环多少次建议使用while循环
3、for循环中,控制循环的变量只在循环中可以使用。While循环中,控制循环的变量在循环后还可以使用
死循环
一直循环的执行下去,如果没有干预不会停下来
for(;;){
System.out.println("Hello World");
}
//经典做法
while(true){
System.out.println("Hello World");
}
do{
System.out.println("Hello World");
}while (true);
eg:
public static void main(String[] args) {
//1、定义正确的密码
int okPassword = 520;
//2、定义一个死循环让用户不断的输入密码验证
Scanner sc = new Scanner(System.in);
while(true){
System.out.println("请您输入正确的密码: ");
int password = sc.nextInt();
//3、使用if判断密码是否正确
if (password == okPassword){
System.out.println("登录成功了~~~~");
break;//可以立即结束当前所在循环的执行的
}else {
System.out.println("密码错误! ");
}
}
}
循环嵌套
循环中又包含循环
for(int i = 0; i < 3; i++){
for (int j = 0; j < 5; j++){
System.out.println("我爱你");
}
}
//理解嵌套循环的执行流程
//场景:假如你有老婆,然后你犯错了,你老婆罚你说五天,每天三句我爱你
for(int i = 0; i < 5; i++){
for (int j = 0; j < 3; j++){
System.out.println("我爱你");
}
}
/**
*****
*****
*****
*****
*/
for (int i = 0; i < 4 ;i++){
for (int j = 0; j <5; j++){
System.out.print("*");
}
System.out.println();//换行
}
特点:外部循环每循环一次,内部循环全部执行完一次
跳转关键字
break
跳出并结束当前所在循环的执行
continue
用于跳出当前循环的当次执行,进入下一次循环
注意事项
break:只能用于结束所在循环,或者结束所在switch分支的执行
continue:只能在循环中进行使用
public static void main(String[] args) {
//理解break和continue的使用
//场景:假如你又有老婆了,然后你犯错了,你老婆罚你做5家务,每天都是洗碗,但是到第3天心软了原谅你了不用洗了
for (int i = 0; i <5; i++){
System.out.println("苦逼的洗碗");
if (i == 2){
break;//跳出并结束当前循环的执行
}
}
System.out.println("------------");
//continue 跳出当前循环的当次执行,进入循环的下一次
//场景:假如你又有老婆了,然后你犯错了,你老婆罚你做5家务
// 每天都是洗碗,但是到第3天心软了原谅你了不用洗了,但是依旧不解恨,继续洗第4天,第5天
for (int i = 1; i <= 5 ; i++){
if (i == 3){
continue;//立即跳出当前执行,进入循环的下一次!
}
System.out.println("苦逼的洗碗: "+i);
}
}
案例技术
随机数Random类
Random随机数技术
作用:用于在程序中获取随机数的技术
使用步骤:
1、导包:告诉程序去JDK中哪个包找随机数技术
import java.util.Random;
2、写一行代码代表得到随机数对象
Random r = new Random();
3、调用随机数的功能获取0-9的随机数
int number = r.nextInt(10);
注意:nextInt(n)功能只能生成:0至(n-1)之间的随机数,不包含n。
public static void main(String[] args) {
Random r = new Random();
for (int i = 0;i < 10; i++) {
int data = r.nextInt(10);//0-9不包含10的(包前不包后)
System.out.println(data);
}
System.out.println("-------------");
//生成3-17之间的随机数(可以取到17) ==> -3 ==>(0-14) + 3
int data1 = r.nextInt(15)+3;
System.out.println(data1);
}
public static void main(String[] args) {
//1、随机一个幸运号码 1-100 之间 (0-99)+1
Random r = new Random();
int lucky = r.nextInt(100)+1;
//使用一个死循环让用户不断去猜测,并给出提示
Scanner sc = new Scanner(System.in);
while (true){
//让用户输入数据猜测
System.out.println("请您输入猜测的数据(0-100): ");
int guess = sc.nextInt();
//判断猜测的号码与幸运号码的大小情况
if (guess > lucky){
System.out.println("您猜测的数据过大~~~~");
}else if (guess < lucky){
System.out.println("您猜测的数据过小~~~~");
}else{
System.out.println("恭喜你,猜中了,可以去买单了~~~~~");
break;//直接跳出并结束当前死循环!!
}
}
}