有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java修改的空心星形模式输出网格模式

我试图创建一个程序,在其中输入一个整数,它输出一个与输入相等的网格模式。例如,如果输入3,它将创建3x3模式;如果输入4,它将创建4x4模式,依此类推

为了更好地形象化我想说的话,请参见下面的示例输出

一,↵

*

二,↵

* * * 
* * * 
* * * 

三,↵

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

四,↵

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

修复:

我已将Razvan的代码转换为仅使用for-loopsif-else语句,以实现更好的可视化:

int input, numberOfLines, emptySpaceCount;
input = 4;
numberOfLines = input * (input - 1) + 1;
emptySpaceCount = 2 * input - 3;

if (input < 1) {
  System.out.println("Invalid input!");

} else if (input == 1) {
  System.out.println("*");

} else {
  for (int a = 0; a < numberOfLines; a++) {
    if (a % (input - 1) == 0) {
      for (int b = 0; b < numberOfLines; b++) {
        System.out.print("--");
      }
    } else {
      for (int i = 0; i < input; i++) {
        System.out.print("|");
        for (int j = 0; j < emptySpaceCount; j++) {
          System.out.print(" ");
        }
      }
      System.out.print("|");
    }
    System.out.println();
  }
}

它输出

------------------------- 
|     |     |     |     | 
|     |     |     |     | 
------------------------- 
|     |     |     |     | 
|     |     |     |     | 
------------------------- 
|     |     |     |     | 
|     |     |     |     | 
------------------------- 
|     |     |     |     | 
|     |     |     |     | 
------------------------- 

共 (1) 个答案

  1. # 1 楼答案

    通常,当您看到多个循环嵌套在彼此内部时,您可能会认为设计有问题。如果考虑逐行打印大图,可以简化问题。你有两种台词:

    • 边界线(满是星星)
    • 内线(垂直柱上只有星星)

    所以主要功能应该是这样的:

    void hollowSquares(int number) {
        // Default cases
        if (number < 1) {
            return;
        }
        if (number == 1) {
            System.out.println("*");
            return;
        }
        
        // how many lines will be actually printed
        int numberOfLines = number * (number - 1) + 1;
        
        for (int i = 0; i < numberOfLines; i++) {
            if (isBorderLine(i, number)) {
                printBorderLine(numberOfLines);
            } else {
                printInnerLine(number);
            }
        }   
    }
    
    boolean isBorderLine(int line, int number) {
        return line % (number - 1) == 0;
    }
    

    所以唯一要做的就是实际的打印。对于更简单的情况“边界线”,您可以重复星形和空间模式:

    void printBorderLine(int numberOfLines) {
        String line = String.join("", Collections.nCopies(numberOfLines, "* "));
        System.out.println(line);
    }
    

    对于内边界,您希望重复开始和一对空间模式,然后是一个尾随星

    void printInnerLine(int number) {
        int numberOfEmptySpaces = 2 * number - 3;
        String emptySpaces = String.join("", Collections.nCopies(numberOfEmptySpaces, " "));
        String starWithSpacesPattern = "*" + emptySpaces;
        String line = String.join("", Collections.nCopies(number, starWithSpacesPattern));
        line += "*"; // trailing star
        System.out.println(line);
    }