打印图形 双层菱形
1.问题描述
用户输入双层菱形的边长x(4<x<50),打印出双层菱形
如输入5,输出如下:
*
* *
* * *
* * * *
* * * *
* * * *
* * *
* *
*
2.解题思路
//打印出边长为x的双层菱形,图形输出的每一行作为串放在List lst里
//则边长x与lst长度的关系为lst.size()=2*x-1;
//若x等于5,直接打印,若大于5,根据边长为5的图形进行递归,
//例如边长为6,则将创建一个新的List lst1,将lst中每一项前加上空格加入到lst1中,
//再将lst最中间一项加入到lst1正中间一项的后面,星号之间加上两个空格再加入lst1中的正中间一项的后面
//直到lst.size()=2*x-1,得到满足要求的图形
3.程序代码
import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner; public class SL { static Scanner scan = new Scanner(System.in); static Map map = new HashMap(); static List<String> f(List<String> lst,int x){ if(lst.size()==2*x-1) return lst; List<String> lst1 = new ArrayList<String>(); for(int i=0;i<lst.size();i++){ lst1.add(" "+lst.get(i)); } String s = lst.get(lst.size()/2).substring(0,3)+" "+lst.get(lst.size()/2).substring(3); lst1.add(lst.size()/2+1," "+lst.get(lst.size()/2)); lst1.add(lst.size()/2+1,s); return f(lst1,x); } //打印出边长为x的双层菱形,图形输出的每一行作为串放在List lst里 //则边长x与lst长度的关系为lst.size()=2*x-1; //若x等于5,直接打印,若大于5,根据边长为5的图形进行递归, //例如边长为6,则将创建一个新的List lst1,将lst中每一项前加上空格加入到lst1中, //再将lst最中间一项加入到lst1正中间一项的后面,星号之间加上两个空格再加入lst1中的正中间一项的后面 //直到lst.size()=2*x-1,得到满足要求的图形 static void print(int x){ List<String> lst = new ArrayList<String>(); lst.add(" *"); lst.add(" * *"); lst.add(" * * *"); lst.add(" * * * *"); lst.add("* * * *"); lst.add(" * * * *"); lst.add(" * * *"); lst.add(" * *"); lst.add(" *"); if(x>5) lst = f(lst,x); for(String s : lst){ System.out.println(s); } } //用户输入双层菱形边长a(4<a<50) static void shuang_ling(){ while(true){ System.out.println("如要退出请输入q"); System.out.print("请输入双层菱形边长:"); try{ String s = scan.nextLine(); if(s.equalsIgnoreCase("q")) break; int a = Integer.parseInt(s); if(a<=4||a>=50) throw new Exception(); print(a); } catch(Exception e){ System.out.println(); } } } public static void main(String[] args) { shuang_ling(); } }
4.运行结果