打印图形 回形嵌套
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.运行结果