2015-11-05 6 views
3

Мне тяжело заниматься школьным упражнением на Java. Мы попросили распечатать этот шаблон:Печать ромбического рисунка в java с петлей «для»

+++++++++++++++++++++++++++++++++++++++++++++ 
+++++++ +++++++ +++++++ +++++++ +++++++ 
    +++++ +++++ +++++ +++++ +++++ 
    +++  +++  +++  +++  +++ 
    +  +  +  +  +  
    +++  +++  +++  +++  +++ 
    +++++ +++++ +++++ +++++ +++++ 
+++++++ +++++++ +++++++ +++++++ +++++++ 
+++++++++++++++++++++++++++++++++++++++++++++ 
+++++++ +++++++ +++++++ +++++++ +++++++ 
    +++++ +++++ +++++ +++++ +++++ 
    +++  +++  +++  +++  +++ 
    +  +  +  +  +  
    +++  +++  +++  +++  +++ 
    +++++ +++++ +++++ +++++ +++++ 
+++++++ +++++++ +++++++ +++++++ +++++++ 
+++++++++++++++++++++++++++++++++++++++++++++ 
+++++++ +++++++ +++++++ +++++++ +++++++ 
    +++++ +++++ +++++ +++++ +++++ 
    +++  +++  +++  +++  +++ 
    +  +  +  +  +  
    +++  +++  +++  +++  +++ 
    +++++ +++++ +++++ +++++ +++++ 
+++++++ +++++++ +++++++ +++++++ +++++++ 
+++++++++++++++++++++++++++++++++++++++++++++ 

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

Это то, что я до сих пор:

int a = 9; 
char b = '+'; 
char c = ' '; 

int i_buffer = a; 
int i_leer = 1; 
for (int i = 0; i < a; i++) { 
    for (int z = i_buffer; z > 0; z--) 
     System.out.print(b); 

    System.out.println(); 

    i_buffer = i_buffer - 2; 
    if (i_buffer < 0) 
     break; 

    for (int z = i_leer++; z > 0; z--) 
     System.out.print(c); 
} 
+0

Просто повторите все, что вы делаете перед 'println()' 5 раз в цикле? –

+0

Ромбическая новая пирамида. – Maroun

+1

Большой намек: поскольку он имеет очевидную горизонтальную и вертикальную периодичность, используйте оператор modulo (%). По существу весь вывод представляет собой матрицу с определенным количеством строк и столбцов, каждый элемент является плюсом или пробелом. Таким образом, это сводится к написанию функции f (строка, col), которая возвращает, скажем, 1 для + или 0 для пробела. – Bathsheba

ответ

3

Вот решение, которое может создать этот шаблон так часто, как он хочет, в х и у измерения с каждого размера. Что на самом деле происходит там, где написано как комментарий.

public static void main(String[] args) { 
    test(); 
} 

public static void test() { 
    // Print it three times under each other, 5 times next to each other 
    // With a size of 9 plus 
    printHourglass(3,5,9); 
} 

private static void printHourglass(int column, int times, int size) { 
    for(int i = 0;i<column;++i) { 
     // If it is the first iteration print the first line, otherwhise 
     // Leave out the first only plus line 
     printHourglassRow(times, size, i == 0 ? 0 : 1); 
    } 
} 

private static void printHourglassRow(int times, int size, int start) { 
    // If it is not the first hourglass don´t print the first only plus row 
    int printableStars = start == 0 ? size : size-2; 
    int printableSpaces = start == 0 ? 0 : 1; 
    // If the size is even we need to print one row less 
    size = size % 2 == 0 ? size-1:size; 
    for(int i = start;i<size;++i) { 
     // Decides if we should print whitespaces or spaces first. 
     // only The first and last row start with the plus 
     int mode = (i == size || i == 0) ? 1 : 0; 
     //System.out.println(mode); 
     //System.out.println(printableStars); 
     // We are printing each column, we start with column 0 
     int column = 0; 
     // We print until we did reach the last column. 
     while(column<times*size) { 
      // If we are in print plus mode the next thing we print 
      // will be a space, so switch mode and print stars as long as we should 
      if(mode == 1) { 
       mode = 0; 
       for(int j = 0;j<printableStars;++j) { 
        printPlus(); 
        ++column; 
       } 
      // If we are in print whitespace mode the next thing we print 
      // will be a space, so switch mode and print whitespaces as long as we should 
      } else { 
       mode = 1; 
       // If we reached the second hourglass (column > size/2) 
       // Then we need to print twice as much whitespaces 
       int sizeHalf = size % 2 == 0? size/2 : size/2+1; 
       for(int j = 0;column > sizeHalf ? j<printableSpaces*2:j<printableSpaces;++j) { 
        printSpace(); 
        ++column; 
       } 
      } 
     } 
     // We are not in the middle of the hourglass so 
     // We print two stars less and one whitespace more. 
     if(size - 2*i > 2) { 
      ++printableSpaces; 
      printableStars -= 2; 
     // If we are reaching the point where we are in the middle 
     // Of the houreglass we need to print one whitespace less 
     // and two plus more. 
     } else { 
      --printableSpaces; 
      printableStars += 2; 
     } 
     // Linebreak 
     System.out.println(); 
    } 
} 

private static void printPlus() { 
    System.out.print("+"); 
} 

private static void printSpace() { 
    System.out.print(" "); 
} 
+0

Спасибо большое! Хотя мы слишком рано использовать весь код, который вы мне дали, я могу приспособить его к моим потребностям. Вы очень помогли! :) – eroldru

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

  • Нет связанных вопросов^_^