Печать бокового треугольника в Java - PullRequest
1 голос
/ 23 марта 2010

Я пытаюсь напечатать боковой треугольник в Java. Если пользователь вводит 5, вывод должен быть:

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

Если пользователь вводит 6, вывод должен быть:

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

Я получил его для случая, когда пользователь вводит 5, 3 или 1, но мой код работает только для этих трех случаев Мне было интересно, может ли кто-нибудь помочь мне заставить мой код работать на большее количество случаев. Вот оно:

public void printArrow( int n )
{ int asterisks = 1;
   for ( int i = 0; i <= n/2; i++ )
   {
       for ( int j = i; j < asterisks; j++ )
       {

         System.out.print( "*" );

        }
        asterisks += 3;
        System.out.println();
    }


    asterisks = asterisks / 2 - 2;
    for ( int i = 0;  i < n/2; i++ )
    {
        for ( int k = i; k < asterisks; k++ )
        {
            System.out.print( "*" );

        }
        if ( i == 1 )
        {
            System.out.print( "*" );
        }

        asterisks -= 2;
        System.out.println();
    }
}

Ответы [ 3 ]

1 голос
/ 23 марта 2010

Намного проще решить эту проблему с помощью рекурсии:

static String triangle(int n, String s) {
    return
        n == 0 ? "" :
        n == 1 ? s  :
        s
          + 
            triangle(n - 2, "**" + s)
          +
        s
    ;
}

public static void main(String args[]) {
    System.out.println(triangle(6, "*\n"));
}

Структура треугольника очевидна:

  • n == 0?Нет линии!
  • n == 1?Одна строка!
  • В противном случае?Две линии сэндвич n - 2 строк!(которые длиннее!)
0 голосов
/ 23 марта 2010
double middle = ((double) lines) / 2;
int asterisks = 1;
for (int i = 1; i <= lines; i ++){
    for (int k = 0; k < asterisks; k ++) {
        System.out.print("*");
    }

    if (i < middle) {
        asterisks += 2;
    } else if (i > middle){
        asterisks -= 2;
    }
    System.out.println();
}

Объяснение:

  • lines - это номер ввода (3,4,5,6,7 и т. Д.),Т.е. для нечетных чисел это будет x.5
  • цикл для столько строк, сколько введено
  • , на каждой строке выведите столько звездочек, сколько в переменной asterisks
  • на каждой итерации либо увеличивайте число звездочек на 2, если линия находится перед серединой, либо уменьшайте его, если после.Это означает, что если оно равно, ничего не происходит - т.е. в одной и той же строке указано одинаковое количество звездочек.И не может быть равным для нечетных чисел.
0 голосов
/ 23 марта 2010

Хорошо, я укушу

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

, поэтому я бы начал с печати первой половины:

function triangle( input )
    i <- 1
    while i < input do
        for j from 1 to i do
            print "*"
        end for
        i <- i + 2
        print "\n"
    end while

После этого нам нужно будет разобратьсявторая половина треугольника, которая, поскольку мы уже прошли i к входному значению, означает, что мы можем просто вернуть его вниз.до второго момента, если вы не сделаете этого, вы получите неправильный ответ.Я оставлю выяснить, почему до вас.Если в псевдокоде есть путаница, спросите.

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