break关键字
使用场合:
适用于switch选择结构。
适用于for、while和do…while循环结构。
break的作用:
如果用于switch选择结构,那么作用就是跳出switch选择结构,执行switch选择结构之后的代码。
如果用于循环结构,那么作用就是跳出当前循环,执行循环之后的代码。
break练习题
1、 韩信点兵,三人一组余两人,五人一组余三人,七人一组余四人,请问最少需要多少士兵。
/**
* 思路分析:
* 因为不明确循环的范围(条件),所以我们可以采用死循环来实现,假设循环变量为i。
* 循环变量从1开始递增,每次递增+1。循环变量就是我们需要找的士兵人数!
* 当i满足“i % 3 == 2 && i % 5 == 3 && i % 7 == 4”条件,则找到韩信点兵的人数。
* 满足韩信点兵条件,那么后续循环也没必须继续进行,直接跳出循环即可。--> break关键字
* 注意:死循环一般和break关键字一起使用。
*/
int i = 1;
while(true) {
if(i % 3 == 2 && i % 5 == 3 && i % 7 == 4) {
System.out.println(i);
break;
}
i++;
}
/**
* for循环和while循环总结
* 核心:for循环能做的事情while循环也能实现,while循环能做的事情for循环也能实现。
* while循环的使用场合:
* a)当不明确循环次数的时候,建议使用while死循环。
* --> 好处:语法简洁、可读性高
* b)当循环结束之后,还需要使用循环变量的时候,建议使用while循环。
* --> 因为while循环的循环变量就是声明在循环之外的。
*/
2、 **[难]**输入一个任意整数,判断它是否为质数,如果是质数就输出“是质数”,否则输出‘不是质数’。XM代理申请http://www.kaifx.cn/broker/xm.html质数:除了1和它本身之外,不能被其他数整除的正整数称质数。
实现方案一:假设法
/**
* 步骤分析:
* a)通过Scanner获得一个整数,假设使用变量num来保存该整数。
* b)通过for循环获得[2, num - 1]之间的所有整数,假设循环变量为i。
* c)判断num是否为质数,如果num能别[2, num - 1]之间任意一个数整除,则证明num不是一个质数!
* 1)在判断num是否为质数之前,先假设num就是一个质数。
* --> 定义一个标记(flag),并且把标记值设置为true。
* 2)在判断num是否为质数的过程中,如果num能被[2, num - 1]之间的其中一个数整除,则证明num不是质数!
* --> 推翻假设,设置flag的标记值为false。
* --> 既然已经确定num不是一个质数,那么后续循环也没必须继续进行,使用break跳出循环即可!
* 3)判断num是否为质数完毕后,检查flag标记的值,从而确定num是否为质数!
* --> 如果flag标记值为true,则证明假设成立,也就意味着num是一个质数!
* --> 如果flag标记值为false,则证明假设失败,也就意味着num不是一个质数!
*/
// 1.通过Scanner获得一个整数
Scanner input = new Scanner(System.in);
System.out.print("请输入一个正整数:");
int num = input.nextInt();
// 2.通过for循环获得[2, num - 1]之间的所有整数
// a)在判断num是否为质数之前,先假设num就是一个质数。
boolean flag = true;
for(int i = 2; i < num; i++) {
// 3.判断num是否为质数。
// b)在判断num是否为质数的过程中,如果num能被[2, num - 1]之间的其中一个数整除,则证明num不是质数!
if(num % i == 0) {
// 推翻假设,设置flag的标记值为false。
flag = false;
// 既然已经确定num不是一个质数,那么后续循环也没必须继续进行,使用break跳出循环即可!
break;
}
}
// c)判断num是否为质数完毕后,检查flag标记的值,从而确定num是否为质数!
if(flag) { // 证明假设成立,也就意味着num是一个质数!
System.out.println(num + "是一个质数");
}
else { // 证明假设失败,也就意味着num不是一个质数!
System.out.println(num + "不是一个质数");
}
实现方法二:通过分析for循环的执行顺序来实现!
/**
* 步骤分析:
* a)通过Scanner获得一个整数,假设使用变量num来保存该整数。
* b)通过for循环获得[2, num - 1]之间的所有整数,假设循环变量为i。
* c)判断num是否为质数,如果num能别[2, num - 1]之间任意一个数整除,则证明num不是一个质数!
* 1)在判断num是否为质数的过程中,如果num能被[2, num - 1]之间的其中一个数整除,则跳出循环。
* 2)判断num是否为质数的循环后,判断循环遍历i的值,从而确定num是否为质数。
*/
// 1.通过Scanner获得一个整数
Scanner input = new Scanner(System.in);
System.out.print("请输入一个正整数:");
int num = input.nextInt();
// 2.通过for循环获得[2, num - 1]之间的所有整数
int i = 2;
for (; i < num; i++) {
// 3.判断num是否为质数。
if(num % i == 0) {
break;
}
}
// 判断i的值,从而确定循环是否正常执行完毕
if(i == num) { // 正常执行完毕,永远无法满足“num % i == 0”的条件,也就意味着num是一个质数
System.out.println(num + "是一个质数");
}
else { // 循环执行过程中,满足“num % i == 0”的条件,也就意味着num不是一个质数
System.out.println(num + "不是一个质数");
}
3、**[难]**输入一个正整数,然后把该正整数转化为二进制。
/**
* 思路分析:
* a)获得输入整数的二进制位
* 核心思路:除以2取余数,获得余数反过来就是二进制值。
* 例如:假设输入的正整数为20,并且使用num变量来保存。
* 第一趟:int bit = num % 2; num /= 2; --> bit = 0, num = 10;
* 第二趟:int bit = num % 2; num /= 2; --> bit = 0, num = 5;
* 第三趟:int bit = num % 2; num /= 2; --> bit = 1, num = 2;
* 第四趟:int bit = num % 2; num /= 2; --> bit = 0, num = 1;
* 第五趟:int bit = num % 2; num /= 2; --> bit = 1, num = 0;
* 通过以上思路分析,我们发现每一趟的代码都是一模一样,所以我们使用循环来实现。
* --> 因为不明确循环次数,所以我们采用死循环来实现。while(true) {}
* --> 当num的结果为0时,就可以结束死循环。break关键字
* b)通过获得的二进制位从而得到二进制值。
* 核心思路:定义一个字符串,用于保存num的二进制值。
* a)在循环之外,定义一个字符串(bitStr),用于保存num的二进制值
* b)每获得一个二进制位,就把该二进制位插入到bitStr的最前面。
*/
// 1.通过Scanner获得一个正整数
Scanner input = new Scanner(System.in);
System.out.print("请输入一个正整数:");
int num = input.nextInt();
// 2.获得正整数num的二进制位
// a)在循环之外,定义一个字符串,用于保存num的二进制值
String bitStr = "";
while (true) {
// 获得num的二进制位
int bit = num % 2;
/**
* b)每获得一个二进制位,就把该二进制位插入到bitStr的最前面。
* 第一趟:bit = 0, bitStr = 0 + bitStr; --> bitStr = "0";
* 第二趟:bit = 0, bitStr = 0 + bitStr; --> bitStr = "00";
* 第三趟:bit = 1, bitStr = 1 + bitStr; --> bitStr = "100";
* 第四趟:bit = 0, bitStr = 0 + bitStr; --> bitStr = "0100";
* 第五趟:bit = 1, bitStr = 1 + bitStr; --> bitStr = "10100";
*/
bitStr = bit + bitStr;
// 更新num的值,为下一趟循环做铺垫
num /= 2;
// 当num的值为0时,结束死循环
if (num == 0) {
break;
}
}
System.out.println(bitStr);
|
|