Написание программы, которая отображает (*) квадраты, заполненные и пустые, рядом - PullRequest
0 голосов
/ 29 апреля 2018

Я сейчас пытаюсь отобразить заполненный квадрат звездочки и полую звездочку:

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

Вместо этого я получаю этот вывод:

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

Я не совсем уверен, как сделать это рядом, а не вверх и вниз. Нужно ли помещать полую вложенную петлю внутри заполненной петли или я должен делать что-то еще? Вот мой код:

public class doubleNestedLoops {
    public static void main(String [] args)
    {
        //Filled Square
        for(int i = 1; i <= 5; i++)
        {
            for(int j=1; j<= 10; j++)
            {
                System.out.print("*");
            }
            System.out.println();
        }

        //Hollow Square
        for(int j=1; j<=5; j++)
          {  
            for(int i=1; i<=10; i++)
            {
              if(j ==1 || j==5 || i==1 || i==10)  
              {
                System.out.print("*");
              }
              else
              {
                   System.out.print(" ");
              }
            }
             System.out.println();
          } 
    }
}

Извините за плохое форматирование

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Ответ Джона Мартинеса работает отлично, но он немного неэффективен. Я поставлю шаг за шагом ваш код, который я обновил:

public class Main {
    public static void main(String[] args) {
        //Both Squares
        StringBuilder filledLine = new StringBuilder(10);
        StringBuilder hollowLine = new StringBuilder(10);
        for (int i = 1; i <= 5; i++) {
            for (int j = 1; j <= 10; j++) {
                filledLine.append("*");
                if (i == 1 || i == 5 || j == 1 || j == 10) {
                    hollowLine.append("*");
                } else {
                    hollowLine.append(" ");
                }
            }
            System.out.println(filledLine + " " + hollowLine);
            filledLine.delete(0, filledLine.length());
            hollowLine.delete(0, hollowLine.length());
        }
    }

}

Шаг 1: конвертируйте две петли в одну петлю. Это потому, что вы не можете печатать на одной и той же строке после создания новой строки.

Шаг 2: Поскольку мы будем использовать строки в цикле, более эффективно использовать StringBuffer, поэтому мы не будем постоянно создавать новые строки

Шаг 3: Записать весь вывод вашей логики в буферы вместо консоли.

Шаг 4. Напечатайте буферы по одной строке за раз, когда мы их заполним.

Шаг 5: Прибыль!

0 голосов
/ 29 апреля 2018

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

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

Чтобы сделать это, вы можете реструктурировать свой код примерно так:

//Loop through each line that needs to be printed
for(int i = 1; i <= 5; i++){

   //Loop through characters for filled square needed in this line
   for(int j=0; j< ; j++){
       //Add print logic for filled square
   }

   //Loop through characters for hollow square on the same line
   for(int j=1; j<=5; j++){
       //Add print logic for hollow square
   }

   System.out.println();//Go to next line
}
...