Рисование прямоугольника со звездочками с помощью методов и циклов

Я пытался создать прямоугольник, который выглядит так:

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

или это:

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

в зависимости от числа, которое я ввожу. Кажется, я не могу понять это правильно. Это то, что у меня есть до сих пор:

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);
    }
}

person stargazer    schedule 12.10.2014    source источник
comment
Почему вы начинаете оба цикла с 2?   -  person Jongware    schedule 13.10.2014
comment
Потому что человек, использующий программу, должен ввести длину больше 1.   -  person stargazer    schedule 13.10.2014
comment
Это не уважительная причина. Подумайте, сколько звезд нужно напечатать.   -  person Jongware    schedule 13.10.2014
comment
Итак, вы знаете, что количество звездочек в первой строке равно числу, введенному как длина. Следовательно, прямоугольник имеет длину m и m звездочек нужно напечатать в первой и последней строках. Только 2 должны быть напечатаны в средней строке, а остальные m-2 символы в этой строке между ними являются пробелами.   -  person    schedule 13.10.2014
comment
Да, я понял после просмотра, что это не нужно для моей программы.   -  person stargazer    schedule 13.10.2014


Ответы (3)


Итак, вы просто пытаетесь создать метод, который печатает прямоугольник длиной N. Во-первых, этот метод не должен возвращать целое число, он может быть просто недействительным. В конце основного метода вы печатаете прямоугольник, что равно значению 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 для получения дополнительных полезных советов.

person Community    schedule 12.10.2014

Вы можете создать метод для печати прямоугольников и дополнительный для печати квадратов как частный случай предыдущего, где ширина в два раза больше. высота для правильного отображения.

Выход:

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

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

Код:

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();
    }
}

См. также: Отображение квадратных звездочек, заполненных и полых, рядом

person Community    schedule 18.02.2021

Не могу понять, почему вы начинаете циклы с 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");
}
person Zach    schedule 12.10.2014