回型嵌套
题目:
从标准输入获得一个整数n(1<n<100)
程序则生成嵌套着的回字型星号方框。其最外层方框的边长为n
例如:
输入:
5
程序输出:
*****
* *
* * *
* *
*****
输入:6
程序输出:
******
* *
* ** *
* ** *
* *
******
思路:
思路:new一个二维char数组,最外层方框的边长为n,数组行列都为n,
由于用new分配内存所以要清空数组,给数组赋值,给最外围赋上*号,再用递归,输出里面的回型,最后显示数组。
代码:
import java.util.Scanner; //by小方 2017.0330 public class Test2 { // 保留数组长度,初始化数组为空数组 static void clear(char[][] c){ for(int i=0;i<c.length;i++){ for(int j=0;j<c.length;j++){ c[i][j] = ' '; } } } // 赋值 static void fuzhi(char[][]c,int n,int begin){ if(begin>=n) return ; // 赋值第一行为'*' 上 for(int i=begin;i<n;i++){ c[begin][i]='*'; } // 赋值最后一行为'*' 下 for(int i=n-1;i>=begin;i--){ c[n-1][i]='*'; } // 赋值左一列为'*' 左 for(int i=begin;i<n;i++){ c[i][begin]='*'; } // 赋值右一列为'*' 右 for(int i=n-1;i>=begin;i--){ c[i][n-1]='*'; } //范围缩小2 ,起始位置加2 fuzhi(c,n-2,begin+2); } // 显示数组 static void show(char[][] x){ for(int i=0;i<x.length;i++){ for(int j=0;j<x[i].length;j++){ System.out.print(x[i][j]); } System.out.println(); } } public static void main(String[] args) { while(true){ try{ Scanner scan=new Scanner(System.in); System.out.println("请输入一个整数n(1<n<100):"); String s=scan.nextLine().trim(); //退出 if(s.equals("exit")) break; int n=Integer.parseInt(s); //不符合条件抛异常 if(n<=1||n>=100) throw new Exception(); char[][] c = new char[n][n]; clear(c); fuzhi(c,n,0); show(c); }catch(Exception e){ System.out.println("输入无效"); } } } }
运行结果: