用输入的数字创建星星的正方形

问题描述

我需要一个代码来帮助我使用整数输入来打印一个正方形的星星(在这种情况下,数字为5) 正方形的内部必须为空。

例如:

寻找此输出

* * * * *
*       *
*       *
*       *
* * * * *

我会得到什么

* * * * 
*       
*      
*       
* * * * 

我错过了正方形的右侧。

我的代码

    System.out.print("Please enter a number: ");
    side = input.nextInt();
    for (int i = 0; i < side - 1; i++) {
        System.out.print("* ");

    }
    for (int i = 0; i < side; i++) {
        System.out.println("*");
    }
        
    for (int i = 0; i < side; i++) {
        System.out.print("* ");

    }

}

输入

5

输出

* * * * 
*       
*      
*       
* * * * 

解决方法

您可以使用嵌套的for循环来完成此操作。

for (int i = 0; i < side; i++) {
    for (int j = 0; j < side; j++) {
        if (i == 0 || i == side - 1 || j == 0 || j == side - 1) {
            System.out.print("* ");
        } else {
            System.out.print("  ");
        }
    }
    System.out.println();
}

如果* 是第一行/列或最后一行/列,请打印;否则打印两个空格。

,

可以使用复杂度为O(n)的单个For循环完成

public static void main(String[] args) {
    System.out.print("Please Enter a Number ");
    Scanner scanner = new Scanner(System.in);
    int number = scanner.nextInt();
    if(number >= 3) {
        String endPattern = new String(new char[number]).replace("\0"," *");
        String midPattern = String.format("%-"+(number-2)*2+"s  %s"," *"," *");
        
        for(int i=1; i<= number; i++) {
            if(i==1 || i==number) {             
                System.out.print(endPattern);
            }
            else {
                System.out.print(midPattern);
            }
            System.out.println();
        }
    }
}

输出(用于输入3)

Please Enter a Number 3
 * * *
 *   *
 * * *

输出(用于输入7)

Please Enter a Number 7
 * * * * * * *
 *           *
 *           *
 *           *
 *           *
 *           *
 * * * * * * *
,

您需要在for循环的中间结尾处添加一个额外的星形。这可以通过嵌套一秒的for循环空间,然后打印星号来完成。

for (int i = 0; i < side; i++) {
    System.out.print("*");
    for (int j = 0; j < side; j++) {
        System.out.print("  ");
    }
    System.out.println("*");
}