2015-01-08 3 views
1

Моя домашняя работа создает фигуры с «+, -, |»Рисование фигур с "+, -, |" в Java

я должен сделать это:

+--+--+--+ 
| | | | 
+--+--+--+ 
| | | | 
+--+--+--+ 
| | | | 
+--+--+--+ 

Но я видел это на выходе:

+--+--+--+ 
| | | | 
+--+--+--+ 
| | | | 
+--+--+--+ 
| | | | 
+--+--+--+ 
| | | | 

Вот мой код:

public class Method { 

     void MakingShapes() 
      { 
       for (int j = 0; j <= 3; j++) { 

        for (int i = 0; i <=9; i++) { 

         if(i%3==0) 
         { 
          System.out.print("+"); 
         } 

         else 
         { 
          System.out.print("-"); 
         } 
        } 

        System.out.print("\n"); 

        for (int i = 0; i <=9; i++) { 

         if(i%3==0) 
         { 
          System.out.print("|"); 

         } 
         else 
         { 
          System.out.print(" "); 
         } 
        } 
        System.out.println(""); 

       } 
      } 
     } 

Я знаю, что моя вина является в цикле, но я не могу найти его, но он выглядит как в последнем цикле. Спасибо.

+0

Вы должны сделать последний цикл итерации особого случая. Все остальные итерации отображают строки '+', за которыми следуют строки '|', но последняя строка '+' ** не **, за которой следует строка '|'. Вам понадобится что-то вроде 'if (j <3)' или 'if (j! = 3)'. – ajb

ответ

4

Я думаю, что вы могли бы сделать это гораздо яснее, используя отдельные методы:

private void verticalLine() { 
    for (int i = 0; i <= 9; i++) { 

     if (i % 3 == 0) { 
     System.out.print("|"); 

     } else { 
     System.out.print(" "); 
     } 
    } 
    System.out.println(""); 
    } 

    private void horizontalLine() { 
    for (int i = 0; i <= 9; i++) { 

     if (i % 3 == 0) { 
     System.out.print("+"); 
     } 

     else { 
     System.out.print("-"); 
     } 
    } 

    System.out.print("\n"); 
    } 

Ваш метод становится:

void MakingShapes() { 
    for (int j = 0; j <= 3; j++) { 
     horizontalLine(); 
     verticalLine(); 
    } 
    } 

и это действительно очевидно, что вам просто нужно дополнительное horizontalLine() после вызовов цикла, чтобы закрыть экран. Как было отмечено в комментарии от @ JamesC.TaylorIV, чтобы получить целевой выход также необходимо уменьшить цикл только работает в три раза:

void MakingShapes() { 
    for (int j = 0; j < 3; j++) { 
     horizontalLine(); 
     verticalLine(); 
    } 
    horizontalLine(); 
    } 
+3

Вы бы хотели, чтобы цикл выполнялся 3 раза для этого, должен быть 'j <3;' иначе у него будет дополнительная строка в его выводе. –

+0

@ JamesC.TaylorIV Правильно, спасибо. Я отредактировал ответ соответственно. –

1

Проблема заключается в том, что ваш внешний контур работает 4 раза. Он будет выполнять внутреннее содержимое 4 раза, что заставляет цикл for печатать символы | в дополнительное время. Попробуйте добавить условие к вам | цикл, который делает, что он работает 1 раз меньше внешнего контура:

for (int i = 0; i <=9 && j < 3; i++) 
+1

Извините, но это * ужасный * стиль. Если вы хотите избежать запуска цикла, если 'j> = 3', поместите цикл внутри' if (j <3) '. Не хороняйте условие в состоянии завершения цикла. – ajb

0

Чтобы сделать это лучше код, то первое, что вы должны научиться состоит в том, чтобы сделать это повторно использовать с помощью частных методов: например, вы должны закодировать частный метод для печати последовательности «+ - + - + - +», а другой - для печати «| | | |», последовательность.

Как только вы достигли этого, вам понадобится всего один цикл, без IFs, для получения требуемой формы. И, в конце, вам придется снова вызвать метод «+ - + - + - +».

Попробуйте этот способ и поймите, как вы будете создавать более короткую, легко читаемую и поддерживающую программу.

+0

Спасибо. У меня есть еще один вопрос, подобный этому, и я попробую вас сказать. –

0
  1. Я рекомендую отформатировать кронштейны по-разному (открывающая фигурная скобка на той же линии). Это экономит некоторое вертикальное пространство, и код становится более разборчивым.
  2. Я немного изменил свой код: я добавил методы для улучшения удобочитаемости и изменил инструкции if на встроенные (опять же, чтобы уменьшить требуемое вертикальное пространство и, следовательно, улучшить читаемость).

    private void printHorizontalLine() { 
        for (int i = 0; i <= 9; i++) { 
         System.out.print((i % 3 == 0) ? "+" : "-"); 
        } 
    } 
    
    private void printCells() { 
        for (int i = 0; i <= 9; i++) { 
         System.out.print((i % 3 == 0) ? "|" : " "); 
        } 
    } 
    
    void MakingShapes() { 
        for (int j = 0; j <= 3; j++) { 
         this.printHorizontalLine(); 
         System.out.println(); 
         this.printCells(); 
         System.out.println(); 
        } 
        this.printHorizontalLine(); 
    }