循环嵌套

循环嵌套是指一个循环在另一个循环之内;

①内层循环结构遍历一遍,只相当于外层循环循环体执行了一次

②假设外层循环需要执行M次,内层循环需要执行N次,此时,内层循环体一共执行了M*N次

技巧:外层循环变量控制行数,内层变量控制列数

public class Nested {
public static void main(String[] args) {
 int i,j;
 for(i=0;i<10;i++) {
  for(j=i;j<10;j++)//第一次将j=i输入成了j=1,运行出来等长的点
   System.out.print(".");//将println输成print,则换行了
  System.out.println(" ");
 }
}


}

正确运行结果:

当将代码第五行改成j=1时,运行结果为

print与println区别:

print 不会换行,println会换行;

 

 

心得:虽然是很简单的代码,但一不小心就很容易出错,必须弄懂每一步,加以深化;

 

加更练习:通过循环嵌套实现九九乘法表;

 1 public class NineNine {
 2 
 3     public static void main(String args[]){
 4         for(int i=1;i<=9;i++) {
 5             for(int j=1;j<=i;j++) {
 6                 System.out.print(i+"*"+j+"="+i*j+" ");
 7             }
 8             System.out.println();
 9         }
10     
11     
12     
13     }
14     }

运行结果:

100以内所有的质数输出

 1 //质数,只有被1和它本身整除的自然数------即从2开始到这个数-1都不能被这个数本身整除
 2 public class PrimeNumber {
 3     public static void main(String args[]) {
 4         for(int i=2;i<=100;i++) {//遍历100以内的自然数
 5             boolean isFlag=true;
 6             for(int j=2;j<i;j++) {//j:被i去除
 7                 if(i%j==0) {
 8                     isFlag=false;
 9                 }
10                 
11             }
12             if(isFlag==true) {
13                 System.out.println(i);
14         }
15         }
16         
17     }
18 
19 }

运行结果:

优化一:加上break;为使优化明显表示出来,引用了currentTimeMillis()方法,并将100以内改为100000以内。

 1 public class PrimeNumber {
 2     public static void main(String args[]) {
 3         long start = System.currentTimeMillis();//获取当前时间距离1970-01-01 00:00:00的毫秒数
 4         for(int i=2;i<=100000;i++) {//遍历100000以内的自然数
 5             boolean isFlag=true;
 6         
 7             for(int j=2;j<i;j++) {//j:被i去除
 8                 
 9                 if(i%j==0) {
10                     isFlag=false;
11                     break;//优化一:一旦被除尽,就不会再往下除,只对本身非质数的自然数是有效的
12                 }
13             }
14             if(isFlag==true) {
15                 System.out.println(i);
16         }
17         }
18         long end=    System.currentTimeMillis();
19         System.out.println("所花费的时间为:"+(end-start));
20     }
21 
22 }

 如下图所示,加break优化花费时间为2204ms.不加则花费22014ms;

优化二:

 1 public class PrimeNumber {
 2     public static void main(String args[]) {
 3         long start = System.currentTimeMillis();//获取当前时间距离1970-01-01 00:00:00的毫秒数
 4         for(int i=2;i<=100;i++) {//遍历100以内的自然数
 5             boolean isFlag=true;
 6         
 7             for(int j=2;j<=Math.sqrt(i);j++) {//j:被i去除       优化二
 8                 
 9                 if(i%j==0) {
10                     isFlag=false;
11                     //break;//优化一:一旦被除尽,就不会再往下除,只对本身非质数的自然数是有效的
12                 }
13             }
14             if(isFlag==true) {
15                 System.out.println(i);
16         }
17         }
18         long end=    System.currentTimeMillis();
19         System.out.println("所花费的时间为:"+(end-start));
20     }
21 
22 }

 

posted @ 2019-04-02 20:18  Boogiever  阅读(1212)  评论(0编辑  收藏  举报