##################################################
目录
##################################################
详解 break/continue 跳转语句
——————————
b/c 跳转语句对二重循环的影响
break/continue 还记得吗?
当我们希望在某种条件下 想让程序 不按正常流程执行
可以用 break/continue
但是这个跳转在二重循环中 起到什么作用呢?。。
当 break/continue 在内循环时 只会影响内循环的执行流程
而不会对外循环的执行流程有丝毫影响
所以 她们的不同 仅仅是程序的跳转位置不同
break
break 会跳出本层循环 提前结束此循环代码段
break 会直接跳出整个内循环代码段 即 结束此 遍 内循环
忘了吗?外跑一趟,内跑一遍!
执行在内循环后的代码段 若没有 则跳到外循环继续执行
continue
continue 是跳出本次循环 继续下一次循环
内循环中的 continue 就是 结束此次循环 继续下一次内循环
完全不影响内循环块以外的代码段
——————————
break 示例程序
需求:
你的 MM 要求你跟着逛街 一共有 10 家店 每家限购 5 件衣服
你的 MM 要求 必须把这十家店逛完
一家店买 5 件衣服 只要不离开 就一直买 5 件衣服。。
中途退出就买 1 件衣服
那 一共买了 几件衣服?。。
demo:
C:\Users\byme\javaTest>javac test.java
C:\Users\byme\javaTest>java test
欢迎光临第 1 家店 : 灰太狼娃娃店
要离开吗?(y/n) <<< n
。。买了 5 件衣服
要离开吗?(y/n) <<< n
。。买了 5 件衣服
要离开吗?(y/n) <<< y
还好,只买了一件。。
欢迎光临第 2 家店 : 喜阳阳店
要离开吗?(y/n) <<< y
还好,只买了一件。。
欢迎光临第 3 家店 : 一路向西
要离开吗?(y/n) <<< y
还好,只买了一件。。
欢迎光临第 4 家店 : 一路向东
要离开吗?(y/n) <<< n
。。买了 5 件衣服
要离开吗?(y/n) <<< y
还好,只买了一件。。
欢迎光临第 5 家店 : 一路欢喜
要离开吗?(y/n) <<< y
还好,只买了一件。。
欢迎光临第 6 家店 : 一路嘻哈
要离开吗?(y/n) <<< y
还好,只买了一件。。
欢迎光临第 7 家店 : 牛仔专卖店
要离开吗?(y/n) <<< y
还好,只买了一件。。
欢迎光临第 8 家店 : 拖拉板子
要离开吗?(y/n) <<< y
还好,只买了一件。。
欢迎光临第 9 家店 : 风中的黄裤衩
要离开吗?(y/n) <<< y
还好,只买了一件。。
欢迎光临第 10 家店 : 冯提莫儿
要离开吗?(y/n) <<< n
。。买了 5 件衣服
要离开吗?(y/n) <<< y
还好,只买了一件。。
一共买了 30 件衣服 555..
.
C:\Users\byme\javaTest>
code:
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int count = 0; /* 计数 记录件数 */
String out = ""; /* 记录 滚出 */
String Shop[] = new String[] { "灰太狼娃娃店", "喜阳阳店",
"一路向西", "一路向东",
"一路欢喜", "一路嘻哈",
"牛仔专卖店", "拖拉板子",
"风中的黄裤衩", "冯提莫儿" }; /* 店名 */
for ( int i = 1; i <= 10; i ++ ) {
System.out.println ( "欢迎光临第 " + i + " 家店 : " + Shop[i-1] );
for ( int j = 1; j <= 10; j ++ ) {
System.out.print ( "要离开吗?(y/n) <<< " );
out = input.next();
if ( out.equals("y") )
/* 如果离开 买了 1 件 */
break;
/* 没有离开 买了 5 件 */
System.out.println ( "。。买了 5 件衣服\n" );
count += 5; /* 什么是 += 还记得吗? count = count + 5; */
}
System.out.println ( "还好,只买了一件。。\n" );
count ++;
}
System.out.println ( "一共买了 " + count + " 件衣服 555.." );
out = input.next(); /* 输入任意内容回车结束程序.. */
}
}
——————————
contiune 示例程序
需求:
计算积分在 100 点积分以上的用户有几个?
demo:
C:\Users\byme\javaTest>javac test.java
C:\Users\byme\javaTest>java test
请输入一共有几组用户 <<< 3
请输入每组有几个用户 <<< 5
请输入 5 个用户的积分 当前,第 1 组
第 1 位用户的积分 <<< 76
第 2 位用户的积分 <<< 58
第 3 位用户的积分 <<< 109
第 4 位用户的积分 <<< 103
第 5 位用户的积分 <<< 300
第 1 组用户平均积分为 >>> 129.2
请输入 5 个用户的积分 当前,第 2 组
第 1 位用户的积分 <<< 56
第 2 位用户的积分 <<< 32
第 3 位用户的积分 <<< 87
第 4 位用户的积分 <<< 65
第 5 位用户的积分 <<< 90
第 2 组用户平均积分为 >>> 66.0
请输入 5 个用户的积分 当前,第 3 组
第 1 位用户的积分 <<< 120
第 2 位用户的积分 <<< 23
第 3 位用户的积分 <<< 454
第 4 位用户的积分 <<< 56
第 5 位用户的积分 <<< 7
第 3 组用户平均积分为 >>> 132.0
积分在 100 分以上的用户 有 5 人
C:\Users\byme\javaTest>
code:
import java.util.*;
public class test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int money_P = 0; /* 记录有钱人 */
double SUM = 0.0; /* 总积分 */
/* 组数量 */
System.out.print ( "请输入一共有几组用户 <<< " );
int group = input.nextInt();
double sum[] = new double[group]; /* 平均积分数组 */
/* 每组用户数量 */
System.out.print ( "请输入每组有几个用户 <<< " );
int user_num = input.nextInt();
int user[] = new int[user_num]; /* 用户数量数组 */
System.out.println();
for ( int i = 0; i < group; i ++ ) {
/* 外层循环控制组数量 */
SUM = 0.0; /* 总积分归零 */
System.out.println ( "请输入 " + user_num + " 个用户的积分 当前,第 " + (i + 1) + " 组" );
for ( int j = 0; j < user.length; j ++ ) {
/* 内层循环控制每组用户数量 */
System.out.print ( "第 " + (j + 1) + " 位用户的积分 <<< " );
user[j] = input.nextInt();
SUM += user[j]; /* 总和 初始为 0 = 上次和 + 此次 */
if ( user[j] < 100 )
/* 卡住穷鬼 */
continue; /* 穷鬼 跳过不管 */
money_P ++; /* 有钱人 + 1 */
}
sum[i] = SUM / user.length; /* 计算平均分 */
System.out.println ( "第 " + (i + 1) + " 组用户平均积分为 >>> "
+ sum[i] + "\n" );
}
System.out.println ( "积分在 100 分以上的用户 有 " + money_P + " 人" );
}
}
改进一下程序
升级需求:
循环录入用户积分然后计算用户平均积分
积分在 100 以上的有几人
添加一个功能:
积分大于 90 的用户平均分有多少?
demo:
C:\Users\byme\javaTest>javac test.java
C:\Users\byme\javaTest>java test
请输入一共有几组用户 <<< 4
请输入每组有几个用户 <<< 2
请输入 2 个用户的积分 当前,第 1 组
第 1 位用户的积分 <<< 100
第 2 位用户的积分 <<< 200
第 1 组用户平均积分为 >>> 150.0
请输入 2 个用户的积分 当前,第 2 组
第 1 位用户的积分 <<< 56
第 2 位用户的积分 <<< 32
第 2 组用户平均积分为 >>> 44.0
请输入 2 个用户的积分 当前,第 3 组
第 1 位用户的积分 <<< 79
第 2 位用户的积分 <<< 92
第 3 组用户平均积分为 >>> 85.5
请输入 2 个用户的积分 当前,第 4 组
第 1 位用户的积分 <<< 132
第 2 位用户的积分 <<< 99
第 4 组用户平均积分为 >>> 115.5
积分在 100 分以上的用户 有 3 人
积分大于 90 的用户平均分 为 49 %
C:\Users\byme\javaTest>java test
请输入一共有几组用户 <<< 4
请输入每组有几个用户 <<< 2
请输入 2 个用户的积分 当前,第 1 组
第 1 位用户的积分 <<< 100
第 2 位用户的积分 <<< 200
第 1 组用户平均积分为 >>> 150.0
请输入 2 个用户的积分 当前,第 2 组
第 1 位用户的积分 <<< 56
第 2 位用户的积分 <<< 32
第 2 组用户平均积分为 >>> 44.0
请输入 2 个用户的积分 当前,第 3 组
第 1 位用户的积分 <<< 79
第 2 位用户的积分 <<< 92
第 3 组用户平均积分为 >>> 85.5
请输入 2 个用户的积分 当前,第 4 组
第 1 位用户的积分 <<< 132
第 2 位用户的积分 <<< 99
第 4 组用户平均积分为 >>> 115.5
积分在 100 分以上的用户 有 3 人
积分大于 90 的用户平均分 为 49 %
C:\Users\byme\javaTest>java test
请输入一共有几组用户 <<< 10
请输入每组有几个用户 <<< 5
请输入 5 个用户的积分 当前,第 1 组
第 1 位用户的积分 <<< 100
第 2 位用户的积分 <<< 200
第 3 位用户的积分 <<< 300
第 4 位用户的积分 <<< 400
第 5 位用户的积分 <<< 500
第 1 组用户平均积分为 >>> 300.0
请输入 5 个用户的积分 当前,第 2 组
第 1 位用户的积分 <<< 34
第 2 位用户的积分 <<< 54
第 3 位用户的积分 <<< 675
第 4 位用户的积分 <<< 54
第 5 位用户的积分 <<< 43
第 2 组用户平均积分为 >>> 172.0
请输入 5 个用户的积分 当前,第 3 组
第 1 位用户的积分 <<< 23
第 2 位用户的积分 <<< 43
第 3 位用户的积分 <<< 54
第 4 位用户的积分 <<< 65
第 5 位用户的积分 <<< 76
第 3 组用户平均积分为 >>> 52.2
请输入 5 个用户的积分 当前,第 4 组
第 1 位用户的积分 <<< 78
第 2 位用户的积分 <<< 65
第 3 位用户的积分 <<< 56
第 4 位用户的积分 <<< 76
第 5 位用户的积分 <<< 900
第 4 组用户平均积分为 >>> 235.0
请输入 5 个用户的积分 当前,第 5 组
第 1 位用户的积分 <<< 324
第 2 位用户的积分 <<< 45345
第 3 位用户的积分 <<< 565
第 4 位用户的积分 <<< 676
第 5 位用户的积分 <<< 56
第 5 组用户平均积分为 >>> 9393.2
请输入 5 个用户的积分 当前,第 6 组
第 1 位用户的积分 <<< 45
第 2 位用户的积分 <<< 4345
第 3 位用户的积分 <<< 34
第 4 位用户的积分 <<< 567
第 5 位用户的积分 <<< 54
第 6 组用户平均积分为 >>> 1009.0
请输入 5 个用户的积分 当前,第 7 组
第 1 位用户的积分 <<< 6565
第 2 位用户的积分 <<< 768
第 3 位用户的积分 <<< 34
第 4 位用户的积分 <<< 6565
第 5 位用户的积分 <<< 343
第 7 组用户平均积分为 >>> 2855.0
请输入 5 个用户的积分 当前,第 8 组
第 1 位用户的积分 <<< 232
第 2 位用户的积分 <<< 546
第 3 位用户的积分 <<< 76
第 4 位用户的积分 <<< 45
第 5 位用户的积分 <<< 43
第 8 组用户平均积分为 >>> 188.4
请输入 5 个用户的积分 当前,第 9 组
第 1 位用户的积分 <<< 4534
第 2 位用户的积分 <<< 454
第 3 位用户的积分 <<< 5456
第 4 位用户的积分 <<< 666
第 5 位用户的积分 <<< 777
第 9 组用户平均积分为 >>> 2377.4
请输入 5 个用户的积分 当前,第 10 组
第 1 位用户的积分 <<< 888
第 2 位用户的积分 <<< 999
第 3 位用户的积分 <<< 100
第 4 位用户的积分 <<< 10000
第 5 位用户的积分 <<< 1111
第 10 组用户平均积分为 >>> 2619.6
积分在 100 分以上的用户 有 29 人
积分大于 90 的用户平均分 为 222 %
C:\Users\byme\javaTest>
code:
import java.util.*;
public class test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int money_P = 0; /* 记录有钱人 */
double SUM = 0.0; /* 总积分 */
/* 组数量 */
System.out.print ( "请输入一共有几组用户 <<< " );
int group = input.nextInt();
double sum[] = new double[group]; /* 平均积分数组 */
/* 每组用户数量 */
System.out.print ( "请输入每组有几个用户 <<< " );
int user_num = input.nextInt();
int user[] = new int[user_num]; /* 用户数量数组 */
int G[] = new int[100]; /* 高于 90 的用户积分 G[0] 保留 临时计算用 */
int G_num = 0; /* 高于 90 的数量 */
System.out.println();
for ( int i = 0; i < group; i ++ ) {
/* 外层循环控制组数量 */
SUM = 0.0; /* 总积分归零 */
System.out.println ( "请输入 " + user_num + " 个用户的积分 当前,第 " + (i + 1) + " 组" );
for ( int j = 0; j < user.length; j ++ ) {
/* 内层循环控制每组用户数量 */
System.out.print ( "第 " + (j + 1) + " 位用户的积分 <<< " );
user[j] = input.nextInt();
SUM = SUM + user[j]; /* 总和 初始为 0 = 上次和 + 此次 */
if ( user[j] > 90 )
/* 记录高于 90 的积分 */
G[j+1] = user[j];
if ( user[j] < 100 )
/* 卡住穷鬼 跳过不管 */
continue;
money_P ++; /* 有钱人 + 1 */
}
sum[i] = SUM / user.length; /* 计算平均分 */
System.out.println ( "第 " + (i + 1) + " 组用户平均积分为 >>> "
+ sum[i] + "\n" );
}
System.out.println ( "积分在 100 分以上的用户 有 " + money_P + " 人" );
for ( int i = 1; i <= G.length - 1; i ++ ) {
if ( G[i] == 0 )
break;
G_num ++;
G[0] = G[i];
}
System.out.println ( "积分大于 90 的用户平均分 为 " + (G[0]/G_num) + " %" );
}
}
——————————
continue 搭配 break
需求:
买商品 单价超过 100 以上的商品 享受 8 折优惠
一共有多少商品被打折?
demo:
C:\Users\byme\javaTest>javac test.java
C:\Users\byme\javaTest>java test
有几个顾客 <<< 4
每人买了几个东东 <<< 2
请输入第 1 个人的 2 件东东的价格 <<<
99
100
第 1 个人一共有 0 件商品享受八折优惠..
还要继续吗?(y/n) >>> y
请输入第 2 个人的 2 件东东的价格 <<<
101
100
第 2 个人一共有 1 件商品享受八折优惠..
还要继续吗?(y/n) >>> y
请输入第 3 个人的 2 件东东的价格 <<<
200
300
第 3 个人一共有 2 件商品享受八折优惠..
还要继续吗?(y/n) >>> n
程序结束 ..
C:\Users\byme\javaTest>
code:
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print ( "有几个顾客 <<< " );
int P = input.nextInt();;
System.out.print ( "每人买了几个东东 <<< " );
int W = input.nextInt();
for ( int i = 0, count = 0; i < P; i ++ ) {
/* 分析需求 发现 外层控制顾客数量 i < 顾客 */
System.out.println ( "\n请输入第 " + (i + 1) + " 个人的 " + W + " 件东东的价格 <<< " );
for ( int j = 0; j < W; j ++ ) {
/* 内层控制 每人买多少件商品 j < 商品 */
double M = input.nextDouble(); /* 循环录入价格 */
/* 判断是否可以折扣 折扣就计数 不折扣就 continue */
if ( M > 100.0 )
count ++;
if ( M < 100.0 )
continue;
}
System.out.println ( "第 " + (i + 1) + " 个人一共有 " + count + " 件商品享受八折优惠.." );
count = 0; /* 计数归零 */
System.out.print ( "还要继续吗?(y/n) >>> " );
String Y_N = input.next();
if ( Y_N.equals( "n" ) )
break;
if ( Y_N.equals ( "y" ) )
continue;
}
System.out.println ( "\n程序结束 .." );
}
}
——————————
模拟 ATM 机
需求:
模拟 ATM 取款过程
密码最多输入 3 次 超过限制次数 则提示: 密码错误,请取卡
密码若正确 提示输入金额 一次 100 一次取钱最低为 0 最高 1000
如果符合要求 输出钱数 提示: 交易完成,请取卡
否则提示 重新输入金额
demo:
C:\Users\byme\javaTest>javac test.java
C:\Users\byme\javaTest>java test
请输入密码 <<< 111
请输入密码 <<< 111
请输入密码 <<< 111
密码错误,请取卡!
C:\Users\byme\javaTest>java test
请输入密码 <<< 111111
请输入金额 <<< 999
您输入的金额不合法,请重新输入 <<< 67
您输入的金额不合法,请重新输入 <<< 99
您输入的金额不合法,请重新输入 <<< 0
您取了 0 ¥
交易成功,请取卡!
C:\Users\byme\javaTest>java test
请输入密码 <<< 111111
请输入金额 <<< 2000
您输入的金额不合法,请重新输入 <<< 1001
您输入的金额不合法,请重新输入 <<< 456
您输入的金额不合法,请重新输入 <<< 10000
您输入的金额不合法,请重新输入 <<< 100
您取了 100 ¥
交易成功,请取卡!
C:\Users\byme\javaTest>
code:
import java.util.*;
public class test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int Pass = 000000, Amount = 0, Number_1 = 0, Number_2 = 0;
for ( int i = 1; i <= 3; i ++ ) {
/* 外循环控制输入密码次数 && 验证是否通过 未通过则 continue 继续输入 */
System.out.print ( "请输入密码 <<< " );
Pass = input.nextInt();
if ( Pass != 111111 ) {
/* 假设密码为 111111 */
if ( i == 3 )
/* 执行到这里 证明失败 3 次 自动结束外循环 外循环后面无代码段 即结束程序 */
System.out.println ( "密码错误,请取卡!" );
/* 执行到这里 证明不合法 跳转到下一次外循环 重新输入再检查 */
continue;
}
System.out.print ( "请输入金额 <<< " );
/* 经典的死循环形式 还记得吗? 不过我们有跳转语句控制程序流程! */
for ( ; ; ) {
/* 内循环控制输入金额 金额合法 则输出 && 提示 && break 跳出 否则 continue 跳到内循环继续接收输入 */
Amount = input.nextInt();
/* 分解位数 */
Number_1 = Amount % 10; /* 分解得到 个 位数 */
Number_2 = Amount / 10 % 10; /* 分解得到 十 位数 */
if ( (Amount < 0) || (Amount > 1000) || (Number_1 != 0) || (Number_2 != 0) ) {
/* 很严谨的条件 大于 0 小于 1000 个位、十位必须为 0 只能为 1000 以内的整百值或为 0 */
/* 执行到这里 证明不合法 跳转到下一次内循环 重新输入再检查 */
System.out.print ( "您输入的金额不合法,请重新输入 <<< " );
continue;
}
/* 执行到这里 证明取完了 可以结束程序了 退出内循环 继续外循环的其余代码 */
System.out.println ( "您取了 " + Amount + " ¥\n交易成功,请取卡!" );
break;
}
/* 执行到这里 证明取完了 并且密码正确 可以结束程序了 退出外循环 结束程序! */
break;
}
}
}