2015-03-20 4 views
0

Я пытаюсь напечатать форму на основе ввода; форма - это «x». Входы должны быть положительными нечетными ints и произвольным символом кисти. У меня есть код для ввода пользователя, но мне нужна помощь с кодом, который на самом деле печатает форму. Вот то, что я до сих пор:Печать формы на основе входов от пользователя

public class TestProgram { 

    public static void main(String[] args) { 
     int height = 5;//Any positive odd int but 5 does not work correctly. Not sure what is going on. 
     char brush = '*'; 

     for (int row = 0; row < height/2; row++) { 
      for (int i = row; i > 0; i--) { 
       System.out.print(" "); 
      } 

      System.out.print(brush); 
      for (int i = (height/2); i >= 2*row; i--) { 
       System.out.print(" "); 
      } 

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

     } 

     for (int row = 1; row < (height/2)+1; row++) { 
      System.out.print(" "); 
     } 
     System.out.print(brush); 
     System.out.print("\n"); 
     for (int row = (height/2)-1; row >= 0; row--) { 
      for (int i = row; i > 0; i--) { 
       System.out.print(" "); 
      } 

      System.out.print(brush); 
      for (int i = (height/2); i >= 2*row; i--) { 
       System.out.print(" "); 
      } 

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

     } 

     for (int row = 1; row < (height/2)+1; row++) { 
      System.out.print(" "); 
     } 

    } 
} 
+2

Код отключается на полпути. Пойдем, тебе нужно будет сделать это лучше, если ты хочешь получить весомый ответ. – christopher

+0

Скопирована и вставлена ​​вся программа здесь. Надеюсь, это поможет вам, ребята. – ClassicCars

ответ

0

Я хотел бы начать с рутиной, чтобы повторить свои charn раз. Что-то вроде

private static String repeat(char ch, int count) { 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < count; i++) { 
     sb.append(ch); 
    } 
    return sb.toString(); 
} 

Тогда, я бы предпочел, чтобы построить String с StringBuilder и repeat рутины. Как

int height = 5; 
char brush = '*'; 
char space = ' '; 
int half = height/2; 
StringBuilder sb = new StringBuilder(); 
for (int row = 0; row < half; row++) { 
    int cols = height - ((row + 1)/2); 
    sb.append(repeat(space, row)).append(brush); 
    sb.append(repeat(space, cols)).append(brush); 
    sb.append(System.lineSeparator()); 
} 
sb.append(repeat(space, half)).append(brush); 
sb.append(System.lineSeparator()); 
for (int row = half - 1; row >= 0; row--) { 
    int cols = height - ((row + 1)/2); 
    sb.append(repeat(space, row)).append(brush); 
    sb.append(repeat(space, cols)).append(brush); 
    sb.append(System.lineSeparator()); 
} 
System.out.println(sb.toString()); 

Поскольку вы не узнали о буферном И.О. еще, что также может быть выражено как

int height = 5; 
char brush = '*'; 
char space = ' '; 
int half = height/2; 
for (int row = 0; row < half; row++) { 
    int cols = height - ((row + 1) * 2); 
    System.out.print(repeat(space, row)); 
    System.out.print(brush); 
    System.out.print(repeat(space, cols)); 
    System.out.println(brush); 
} 
System.out.print(repeat(space, height/2)); 
System.out.println(brush); 
for (int row = (height/2) - 1; row >= 0; row--) { 
    int cols = height - ((row + 1) * 2); 
    System.out.print(repeat(space, row)); 
    System.out.print(brush); 
    System.out.print(repeat(space, cols)); 
    System.out.println(brush); 
} 

И если вы действительно не знаете, как создать метод,

int height = 5; 
char brush = '*'; 
char space = ' '; 
int half = height/2; 
for (int row = 0; row < half; row++) { 
    int cols = height - ((row + 1) * 2); 
    for (int t = 0; t < row; t++) { 
     System.out.print(space); 
    } 
    System.out.print(brush); 
    for (int t = 0; t < cols; t++) { 
     System.out.print(space); 
    } 
    System.out.println(brush); 
} 
for (int t = 0; t < height/2; t++) { 
    System.out.print(space); 
} 
System.out.println(brush); 
for (int row = (height/2) - 1; row >= 0; row--) { 
    int cols = height - ((row + 1) * 2); 
    for (int t = 0; t < row; t++) { 
     System.out.print(space); 
    } 
    System.out.print(brush); 
    for (int t = 0; t < cols; t++) { 
     System.out.print(space); 
    } 
    System.out.println(brush); 
} 
+0

Благодарим вас за советы, но это намного выше моего нынешнего понимания - возможно ли исправить мой код, поскольку он проще для меня? Благодарю. – ClassicCars

+0

@ClassicCars Я исправил (и значительно упростил) ваш код. Какую часть моего ответа вы не понимаете? –

+0

Я не понял ничего из этого - это не ваша вина, я начинаю ученик и не очень далеко в учебе. Это было похоже на mumbo jumbo, если вы понимаете, что я имею в виду. Я также не вижу никаких изменений в исходном коде. Благодарю. – ClassicCars