Распечатать треугольник с параметрами ширины и высоты - PullRequest
2 голосов
/ 25 апреля 2019

Я новичок в программировании и Java.Мне нужно напечатать звездочку и точечный треугольник относительно параметров ширины и высоты.

Пока что я могу печатать только звездочку с одним параметром (высотой).(Предположим, что 6 задано в качестве параметра функции)

Вот мой код:

public static void main(String[] args)
  {
   for(int i=0; i<6; i++)
    {
       for(int j=6; j>=i; j--)
       {
          System.out.print(".");
       }
       for(int x=0; x<=(2*i); x++)
       {
          System.out.print("*");
       }
       for(int k=6; k>=i; k--)
       {
          System.out.print(".");
       }
     System.out.print("\n");
    }
 }

Я хочу дать два параметра (ширину и высоту) функции.Тем не менее, я не могу управлять добавлением второго параметра.

Ожидаемый вывод (с параметрами ширины -11- и высоты -8-):

triangle 11 8

.....*.....
....**.....
...****....
...*****...
..******...
.********..
.*********.
***********

Однако я получил следующий вывод (с одним параметром, который имеет только высоту -6-):

triangle 6

.......*.......
......***......
.....*****.....
....*******....
...*********...
..***********..

Не могли бы вы мне помочь?Как я могу добавить второй параметр в мою функцию и исправить мою проблему?Большое спасибо!

1 Ответ

0 голосов
/ 25 апреля 2019

Ваш код выполняет несколько действий, которые не соответствуют вашему примеру.

Во-первых, вы вообще не используете аргументы. Вы сказали, что предполагается, что 6 передается вашему методу main в качестве аргумента, но я вижу только жестко закодированные 6 в вашем коде. Вы должны вызывать args [0] и args [1], чтобы использовать два аргумента.

Во-вторых, ваша логика цикла отключена, если вы хотите получить результат, заданный аргументами, приведенными в примере. Ваш внешний цикл подходит для количества линий, но ваши внутренние циклы не строят отдельные линии точно. Сложность в том, что содержимое каждой строки должно учитывать отношение ширины к высоте.

Вот пример, который должен решить обе проблемы:

public static void main(String[] args) {
   int width = Integer.parseInt(args[0]);
   int height = Integer.parseInt(args[1]);

   for(int i=0; i<height; i++) {
       int starsThisLine = (int) Math.round(width * ((i+1) / (double) height));
       int dotsBeforeStars = (int) Math.round((width - starsThisLine) / 2.0);

       for(int j=0; j<width; j++)
       {
          if (j < dotsBeforeStars)
             System.out.print(".");
          } else if  (j < dotsBeforeStars + starsThisLine) {
             System.out.print("*");
          } else {
             System.out.print(".");
          }
       }
     System.out.print("\n");
    }
}

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...