Чертане на правоъгълник със звездички с помощта на методи и цикли

Опитвам се да създам правоъгълник, който изглежда така:

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

или това:

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

в зависимост от числото, което въвеждам. Изглежда не мога да го разбера правилно. Ето какво имам досега:

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
Така че знаете, че броят на звездите на първия ред е този на int, въведен като дължина. Следователно правоъгълникът е с дължина m и m звезди трябва да бъдат отпечатани в първия и последния ред. Само 2 трябва да бъдат отпечатани в средния ред, а останалите m-2 знака на този ред между тях са интервали.   -  person    schedule 13.10.2014
comment
Да, разбрах, след като го прегледах, че не е необходимо за моята програма   -  person stargazer    schedule 13.10.2014


Отговори (3)


Така че вие ​​просто се опитвате да създадете метод, който отпечатва правоъгълник с N дължина. Първо, този метод не трябва да връща int, той може просто да бъде празен. В края на основния метод отпечатвате правоъгълник, който е със същата стойност на дължина.

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 пъти. Трябва да изпратите това на Преглед на кода за още полезни съвети.

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