首页 > 代码库 > 扩展思维

扩展思维

一、

 

*
   ***
  *****
*******                     打印出上面的图案,
  *****
   ***
     *   

通常的做法是把整个图案分成两部分,做两次循环即可得到这个图案,网上有很多这样的程序,百度即可,今天在这里就不介绍这个方法了,要介绍的是下面的程序,

/**
      * 将整个图案以中心点为原点画个坐标,定义行数row,然后将x,y从-row到row做循环
      * 将坐标上|x|+|y|<row的整数点全部打印上*即可
      *
      * @author Administrator
      *
      */
public class Star {
   

    /**
     * @param args
     */
    public static void main(String[] args) {
        int row=(int)(Math.random()*10+1);
       
        for(int x=-row;x<=row;x++){
            for(int y=-row;y<=row;y++){
               
                if(Math.abs(x)+Math.abs(y)<=row){
                    System.out.print(“*”);
                }else {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }

}

 

这样做的好处是可以扩展,例如如下:

程序:

public class Star {
   

    /**
     * @param args
     */
    public static void main(String[] args) {
        int row=(int)(Math.random()*10+1);
       
        for(int x=-row;x<=row;x++){
            for(int y=-row;y<=row;y++){
               
                if(Math.abs(x)+Math.abs(y)<=row){
                    System.out.print((char)(Math.abs(x)+‘n‘+Math.abs(y)));
                }else {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
    }

}

输出如下:

s    
     srs   
    srqrs  
   srqpqrs 
  srqpopqrs
srqponopqrs
  srqpopqrs
   srqpqrs 
    srqrs  
     srs   
      s  

也可以是如下这样:

    w        
        vvv       
       uuuuu      
      ttttttt     
     sssssssss    
    rrrrrrrrrrr   
   qqqqqqqqqqqqq  
  ppppppppppppppp 
ooooooooooooooooo
nnnnnnnnnnnnnnnnnnn
ooooooooooooooooo
  ppppppppppppppp 
   qqqqqqqqqqqqq  
    rrrrrrrrrrr   
     sssssssss    
      ttttttt     
       uuuuu      
        vvv       
         w     

  
可能不太好看,将就一下哈,还可以是如下这种图案。

   n  

ono 
     ponop
   qponopq
     ponop
      ono 
       n  

 

二、将两层循环的程序变为一层循环,当然也可以用递归实现,理论上递归可以实现的程序循环也可以实现:

以九九乘法表为例,两层循环如下:

public class ChengFaBiao {

    /**
     * @param args
     */
    public static void main(String[] args) {
              for(int i=1;i<=9;i++){
            for(int j =1;j<=i;j++){
                System.out.print(j+"*"+i+"="+j*i+‘\t‘);
            }
            System.out.println();
        }
       }

}

递归如下:

public class ChengFaBiao1 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        print(1);
    }
    //使用递归打印乘法表
    public static void print(int j){
        if(j>9){
            return;
        }
        for(int i=1;i<=j;i++){
            System.out.print(i+"*"+j+"="+j*i+" ");
        }
        System.out.println();
        print(++j);
    }

}

单层循环如下:

public class ChengFaBiao2 {

    /**
     * @param args
     */
    public static void main(String[] args) {
        int i = 1;
        for(int j = 1;j<=i;j++){
            System.out.print(j+"*"+i+"="+j*i+"\t");
            if(j==9){
                break;
            }
            if(j==i){
                i++;
                j=0;
                System.out.println();
//                continue;
            }
        }
        System.out.println();
      }

}

 

它们的输出结果都一样,输出为

 

image