打印图形 回形嵌套

1.问题描述

输入边长,打印回形嵌套图形,例如输入5:

*****

*      *

*  *  *

*      *

*****

2.解题思路

1.请用户键盘输入边长,读取边长记为x

2.计算x%4 的值,得到对应的装着回形图的每一行的串的List ss,若x小于等于4,

直接输出ss的每一项,否则进行递归,直到ss的长度等于边长x。

3.程序代码

package TiMu;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class HUiZi {
    static Scanner scan = new Scanner(System.in);
    
    //递归运算
    static List<String> hui_xinge(List<String> ss,int n){
        if(ss.size()==n) return ss;    //ss中装着回形图中的每行,若其行数等于边长,此时ss满足要求则返回ss
        
        List<String> lst = new ArrayList<String>();//否则,创建一个新的List lst,其长度应为ss的长度加4,即ss.size()+4
        
        String s1 = "";             //s1 为lst的第一行和最后一行,应为lst.size()个‘*’
        String s2 = "";             //s2 为lst的第一行和最后一行,第一个和最后一个为‘*’,中间为lst.size()-2个空格
        for(int i=0;i<ss.size()+4;i++){            
            if(i==0||i==ss.size()+3){
                s2 = s2 + "*";
                s1 = s1 + "*";
            }
            else{
                s1 = s1 + "*";
                s2 = s2 + " ";
            }
        }
        lst.add(s1);
        lst.add(s2);
        for(int i=0;i<ss.size();i++){ //lst中从第3项到倒数第3项,分别为 ss中每一项在前加"* "和在后加" *"
            lst.add("* "+ss.get(i)+" *");
        }
        lst.add(s2);
        lst.add(s1);
        
        return hui_xinge(lst,n);
        
    }
    //将边长小于等于4的回形的每一行按顺序装入List ss中
    //对用户输入的边长进行分析,若边长小于等于4,直接打印
    //若边长大于4,则将参数ss 和 边长x传入hui_xinge(ss,x)递归运算; 
    static void hui_xinga(int x){        
        List<String> ss = new ArrayList<String>();
        if(x%4==2){
            ss.add("**");
            ss.add("**");
        }
        if(x%4==3){
            ss.add("***");
            ss.add("* *");
            ss.add("***");
        }
        if(x%4==1){
            ss.add("*");
        }
        if(x%4==0){
            ss.add("****");
            ss.add("*  *");
            ss.add("*  *");
            ss.add("****");
        }
        if(x>4){
            ss = hui_xinge(ss,x);
        }        
        for(int i=0;i<ss.size();i++){
            System.out.println(ss.get(i));
        }
    }
    //用户输入回边长
    static void hui_xing(){
        while(true){
            System.out.println("如要退出请输入q");
            System.out.print("请输入回形边长:");
            
            try{
                
                String s = scan.nextLine();
                if(s.equalsIgnoreCase("q")) break;
                int a = Integer.parseInt(s);
                hui_xinga(a);
            }
            catch(Exception e){
                System.out.println();
            }
        }
        
        
    }
    public static void main(String[] args) {
        hui_xing(); //回形嵌套
    }

}

4.运行结果

posted @ 2017-03-29 18:26  名字是卡的好  阅读(346)  评论(0编辑  收藏  举报