循环嵌套是指一个循环在另一个循环之内;
①内层循环结构遍历一遍,只相当于外层循环循环体执行了一次
②假设外层循环需要执行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 }