【问题标题】:Drawing a rectangle with asterisks using methods and loops使用方法和循环绘制带星号的矩形
【发布时间】:2014-10-12 22:57:42
【问题描述】:

我一直在尝试创建一个如下所示的矩形:

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

或者这个:

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

取决于我输入的数字。我似乎无法正确处理。这是我目前所拥有的:

import java.util.Scanner;

public class DrawRectangle {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Enter an integer greater 1 for the length");
        int length = keyboard.nextInt();

        int rectangle = draw_rectangle(length);
        System.out.print(rectangle);
    }

    public static int draw_rectangle(int m) {
        for (int star = 2; star <= m; star++) {
            System.out.print("*");
        }
        System.out.println("*\f   *\f\r\n");
        for (int star = 2; star <= m; star++) {
            System.out.print("*");
        }
        return (m);
    }
}

【问题讨论】:

  • 为什么两个循环都用2开始?
  • 因为使用程序的人必须输入大于1的长度。
  • 这不是一个好的理由。想想有多少颗星星需要打印。
  • 所以你知道第一行的星数是作为长度输入的int的数。因此矩形的长度为 m 并且需要在第一行和最后一行打印 m 个星星。中间一行只需要打印 2 个,中间那一行的剩余 m-2 个字符是空格。
  • 是的,我在查看后意识到,我的程序不需要它

标签: java loops methods ascii-art


【解决方案1】:

所以你只是想创建一个打印长度为 N 的矩形的方法。 首先,这个方法不需要返回一个 int,它可以是 void。在 main 方法的最后,你正在打印 rectangle,这与 length 的值相同。

import java.util.Scanner;

public class DrawRectangle{
    public static void main (String [] args){
        Scanner keyboard = new Scanner(System.in);
        System.out.println("Enter an integer greater 1 for the length");
        int length = keyboard.nextInt();
        draw_rectangle(length);
        // This was rectangle but will print
        // out whatever int the user entered
        System.out.print(length);
    }
    public static void draw_rectangle(int m) {
        for(int star = 0; star < m; star++) System.out.print("*");
        System.out.print("\n*");
        for(int space = 0; space < m-2; space++) System.out.print(" ");
        System.out.print("*\n");
        for(int star = 0; star < m; star++) System.out.print("*");
        System.out.println();
    }
}

您会注意到矩形绘制的变化。第一行是 m *s,下一行包含 2 个 * 和 m-2 空格。下面的行就像第一行一样。请注意,从 0 到 m-1 的循环将迭代 m 次。您应该将此发送至Code Review 以获取更多有用的提示。

【讨论】:

    【解决方案2】:

    您可以创建一个打印 rectangles 的方法和一个用于打印 squares 的附加方法,作为前一个方法的特例,其中 width 是正确显示的 高度 的两倍。

    输出:

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

    代码:

    public static void main(String[] args) {
        printSquare(3, ' ', '*');
        System.out.println();
        printRectangle(3, 12, ' ', '*');
    }
    
    public static void printSquare(int size, char fill, char border) {
        printRectangle(size, size * 2, fill, border);
    }
    
    public static void printRectangle(int height, int width, char fill, char border) {
        for (int i = 0; i < height; i++) {
            for (int j = 0; j < width; j++) {
                if (i == 0 || j == 0 || i == height - 1 || j == width - 1) {
                    System.out.print(border);
                } else {
                    System.out.print(fill);
                }
            }
            System.out.println();
        }
    }
    

    另见:Display squares of asterisks, filled and hollow, side by side

    【讨论】:

      【解决方案3】:

      不知道为什么你用 2 开始循环,或者中间打印试图做什么,但我会这样做:

      for (int i = 0; i < m; i++) {
          for (int j = 0; j < m; j++) {
              if (i == 0 || i == m)
                  System.out.print("*");
              else if (j == 0 || j == m)
                  System.out.print("*");
              else
                  System.out.print(" ");
          }
          System.out.print("\n");
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-25
        • 2016-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多