1. 嵌套循环的使用
1. 定义
将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环
2. java代码
public class ForForTest {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
System.out.print("*");
}
System.out.println('\n');
for (int j = 0; j < 4; j++) {
for (int i = 0; i < 5; i++) {
System.out.print("*");
}
System.out.println();
}
/* i(行号) j(*的个数)
* 1 1
** 2 2
*** 3 3
**** 4 4
***** 5 5
*/
for (int i = 0; i < 5; i++) {
for (int j = 0; j <= i; j++) {
System.out.print("*");
}
System.out.println();
}
/* i(行号) j(*的个数) 规律:i + j = 5 换句话说:j = 5 - i;
**** 1 4
*** 2 3
** 3 2
* 4 1
*/
for (int i = 0; i < 4; i++) {
for (int j = 0; j < 4 - i; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
3. Tip
- 内层遍历一遍,相当于外层循环一次
假设外层循环执行m次,内层循环执行n次。
此时内层循环的循环体一共执行了m * n次4. 九九乘法表
public class NineNineTable { public static void main(String[] args) { for (int i = 1; i <= 9; i++) { for (int j = 1; j <= i; j++) { System.out.print(i + "*" + j + "=" + (i * j) + "\t"); } System.out.println(); } } }
2. break,continue,label的基本使用
1. break,continue的基本使用
break和continue 使用范围 循环中使用的作用(不同点) 相同点 break: switch-case 循环结构中 结束当前循环 关键字后面不能声明执行语句 continue: 循环结构中 结束当次循环 关键字后面不能声明执行语句 2. java代码
public class BreakContinueTest { public static void main(String[] args) { for(int i = 1;i <= 10;i++){ if(i % 4 == 0){ break;//123 //continue;//123567910 //System.out.println("今晚迪丽热巴要约我!!!"); } System.out.print(i); } System.out.println(); for (int i = 1; i <= 4; i++) { for (int j = 1; j <= 10; j++) { if(j % 4 == 0){ break; } System.out.print(j); } System.out.println(); } label:for(int i = 1;i <= 4;i++){ for(int j = 1;j <= 10;j++){ if(j % 4 == 0){ //break label;//结束指定标识的一层循环结构 continue label;//结束指定标识的一层循环结构当次循环 } System.out.print(j); } System.out.println(); } } }
2. 求100000以内的所有质数的输出(逐渐优化)
1. 方法1
public class PrimeNumberTest { public static void main(String[] args) { boolean isFlag = true; for (int i = 2; i <= 100; i++) { //遍历100以内的自然数 for (int j = 2; j < i; j++) { //j:被i去除 if (i % j == 0){ //i被j除尽 isFlag = false; break; } } if(isFlag == true){ System.out.println(i); } isFlag = true; //重置isFlag } } }
2.方法2
public class PrimeNumberTest1 { public static void main(String[] args) { boolean isFlag = true; int count = 0;//记录质数的个数 long start = System.currentTimeMillis();//时间戳 for (int i = 2; i <= 100000; i++) { //遍历100以内的自然数 for (int j = 2; j < Math.sqrt(i); j++) { //j:被i去除 if (i % j == 0){ //i被j除尽 isFlag = false; break; } } if(isFlag == true){ //System.out.println(i); count++; } isFlag = true; //重置isFlag } long end = System.currentTimeMillis();//时间戳 System.out.println("质数的个数为:" + count); System.out.println("所花费的时间为:" + (end - start));//17110 - 优化一:break:1546 - 优化二:13 } }
3. 方法3
public class PrimeNumberTest2 { public static void main(String[] args) { int count = 0;//记录质数的个数 long start = System.currentTimeMillis();//时间戳 label:for (int i = 2; i <= 100000; i++) { //遍历100以内的自然数 for (int j = 2; j < Math.sqrt(i); j++) { //j:被i去除 if (i % j == 0){ //i被j除尽 continue label; } } //能执行到此步骤的,都是质数 count++; } long end = System.currentTimeMillis();//时间戳 System.out.println("质数的个数为:" + count); System.out.println("所花费的时间为:" + (end - start));//17110 - 优化一:break:1546 - 优化二:13 } }
评论 (0)