2015-01-06 6 views
0

я хочу напечатать стиль треугольник/пирамиды, как:ява пирамида/треугольник, используя цикл

1 
    323 
54345 
7654567 

вот мой код:

int lines = 5; 

    for (int i = 1; i < lines; i++) { 

     for (int j = 1; j < lines-i; j++) { 
      System.out.print(" "); 
     } 

     for (int j = i; j > 1; j--) { //this for loop is my problem. any solution? 
      System.out.print(j); 
     } 

     for (int j = i; j < i+i; j++) { 
      System.out.print(j); 
     } 
     System.out.println(); 
} 

, что я получил это

1 
    223 
32345 
4324567 

Я изучал коды во время работы в офисе, и я думаю, что неделя долго я все еще не мог найти решение этого, даже я использую поиск в Google. Я только улучшаю свою логику с помощью условных выражений и без тяжелого объектного ориентирования или рекурсии.

+0

Есть ли алгоритм вы можете указать нам? или правило о том, как цифры должны отображаться? Из того, что я могу собрать, от вершины до кнопки 1-4, затем разветвляйтесь с шагом 1 в любом направлении по строке за строкой? –

+0

Во-первых, вы должны использовать '<=' в своем внешнем цикле, поэтому количество строк совпадает с количеством строк '' '' '. – mbomb007

+0

цифры, которые мне трудно отображать, похожи на 3, затем 54, затем 765, тогда последний цикл отобразит 1, 23, 345, 4567. –

ответ

4

Проблема в вашем первом цикле - проблема, которую вы выяснили в своем втором! (И это что-то делать с наибольшим числом в цикле)

for (int j = i; j > 1; j--) { //this for loop is my problem. any solution? 
    System.out.print(j); 
} 

Посмотрите на цифры на левой стороне пирамиды. Они начинаются там, где на правом конце (каждая линия пирамиды симметрична). И общая формула для этого числа равна i + i - 1, где i - номер строки из вашего внешнего цикла.

Второй ряд начинается с 2 * i - 1 = 2 * 2 - 1 = 3. Третья строка начинается с 2 * 3 - 1 = 5 т.д.

поэтому Ваш второй внутренний цикл должен выглядеть следующим образом:

for (int j = i + i - 1; j > i; j--) { 
    System.out.print(j); 
} 
+0

Спасибо! Хороший улов! –

+0

это решение. спасибо andrei за ответ и florent за исправление :) –

+0

@RandyB. По крайней мере, взгляните на мое решение. Это не исправляет ошибку. – mbomb007

1

Вот полный фиксированный источник.

Вы должны начать с i-го нечетного числа. Это i*2-1. И вы остановитесь на i. Это также фиксирует разность интервалов, введенную путем изменения ее на lines = 4.

int lines = 4; 

for (int i = 1; i <= lines; i++) { 

    for (int j = 1; j < lines-i+1; j++) { 
     System.out.print(" "); 
    } 

    for (int j = i*2-1; j > i; j--) { //this for loop is my problem. any solution? 
     System.out.print(j); 
    } 

    for (int j = i; j < i+i; j++) { 
     System.out.print(j); 
    } 
    System.out.println(); 
} 

Выполнить его здесь: http://ideone.com/AKsc1f

0

ИНТ строки = 4;

для (INT I = 1, я < = линии; я ++) {

for (int j = 1; j < lines-i+1; j++) { 
    System.out.print(" "); 
} 
//replace this 
for(int j=0; j<i-1; j++) System.out.print(i*2-j-1); 
System.out.print(i); 
for(int j=; j<i-1;j++) System.out.print(i+j+1); 
//========== 
System.out.println(); 

}

Смежные вопросы