2016-06-18 2 views
-1

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

Выкройка:

A  A 
AB  BA 
ABC CBA 
ABCD DCBA 
ABCDEDCBA 

Pattern Я был в состоянии напечатать:

A   A 
AB  AB 
ABC  ABC 
ABCD ABCD 
ABCDE ABCDE 

Вот код:

public static void main(String args[]) 
{ 
    int i,j,k,l; 
    System.out.print("Enter the numbers of rows you want to print: "); 
    Scanner scan = new Scanner(System.in); 
    int n = scan.nextInt(); 
    for (i=1;i<=n;i++) 
    { 
     int ch = 65,ch1 = 65; 
     for (j=1;j<=i;j++) 
     { 
      System.out.print((char)ch); 
      ch++; 
     } 
     for (k=n;k>=i+1;k--) 
     { 
      System.out.print(" "); 
     } 

     for (l=1;l<=i;l++) 
     { 
      System.out.print((char)ch1); 
      ch1++; 
     } 
     System.out.println(""); 
    } 
}; 

ответ

0

Комментарии к вашему коду:

  • i,j,k,l; Что это? Вы забыли тип, т. Е. int i,j,k,l;? Если это так, удалите строку и объявите переменные, где они используются, например. for (int i=1;i<=n;i++).
    Затем вы можете повторно использовать имена переменных.

  • Если вы хотите ch быть char, почему бы не сделать это char? Вы также должны использовать 'A' для его инициализации, а не 65.

  • Зачем вам нужны две переменные ch? Просто используйте один.

  • Последние два момента являются спорными, так как вы должны просто вычислить значение непосредственно, например. (char)('A' + j).

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

  • Так как вы хотите, средней буква (E в вашем примере), чтобы печатать только один раз, это означает, что вам нужно нечетного количество пробелов, когда не печать E и без пробелов при печати одиночныйE. Самый простой способ сделать это - для последней линии обрабатывать отдельно.

  • Не нужно добавлять пустую строку при печати новой строки, т. Е. println("")println().

  • Не ставьте ; после вашего метода, то есть };}.

Это результат:

public static void main(String args[]) { 
    System.out.print("Enter the numbers of rows you want to print: "); 
    Scanner scan = new Scanner(System.in); 
    int n = scan.nextInt(); 
    // Print lines 1 to n-1 
    for (int i = 1; i < n; i++) { // count up (i = 1 .. n-1) 
     for (int j = 0; j < i; j++) { // count up (j = 0 .. i-1) 
      System.out.print((char)('A' + j)); 
     } 
     for (int j = 1; j < 2 * (n - i); j++) { // odd number of spaces 
      System.out.print(' '); 
     } 
     for (int j = i - 1; j >= 0; j--) { // count down (j = i-1 .. 0) 
      System.out.print((char)('A' + j)); 
     } 
     System.out.println(); 
    } 
    // Now print last line 
    for (int j = 0; j < n; j++) { // count up (j = 0 .. n-1) 
     System.out.print((char)('A' + j)); 
    } 
    for (int j = n - 2; j >= 0; j--) { // count down (j = n-2 .. 0) 
     System.out.print((char)('A' + j)); 
    } 
    System.out.println(); 
} 
0
int i,j,k,l; 
    System.out.print("Enter the numbers of rows you want to print: \n"); 
    Scanner scan = new Scanner(System.in); 
    int n = scan.nextInt(); 
    for (i=1;i<=n;i++) 
    { 
     int ch = 65,ch1 = 65; 
     for (j=1;j<=i;j++) 
     { 
      System.out.print((char)ch); 
      ch++; 
     } 

     for (k=2*(n+1-i)-3;k>0;k--) 
     { 
      System.out.print(" "); 
     } 

     for (l=1;l<=i;l++) 
     { 
      System.out.print((char)(ch1-l+i)); 
     } 
     System.out.println(""); 
    } 
} 
+0

не дает желаемых результатов. –

0

Для вашей конкретной проблемы, вы должен использовать StringBuilder, так как он не только позволяет вам вводить append символов, но также позволяет использовать строку, идеально подходящую для вашего сценария зеркалирования. Оставляя пространства в качестве единственной задачи для обработки, которая Arrays.fill() может быть в состоянии помочь с

В своем коде вы ввели значение «А» (65) здесь: int ch = 65,ch1 = 65; использовать при печати. Однако петли for также работают с char, что означает, что вы можете интегрировать эту логику в структуру

E.g. если инициализация цикла была 'A', это было бы таким же, как начиная с 'A'. Приращение будет затем обновлять это значение до 'B', 'C' и т. Д., Поскольку оно выполняется в предположении, что вы используете ++. Чтобы лучше объяснить это, есть учебные пособия.

Используя имена переменных, которые передают то, что вы пытаетесь сделать, это упрощает сжатие/оптимизацию вашего кода при его написании. Будем надеяться, что SSCCE в конце этого ответа можно выделить преимущества этого, например, строки: int numberOfSpacesNeeded = numberOfRows - rowIndex;


SSCCE:

public class MirrorPrinting { 

    public static void main(String[] args) { 
     System.out.print("Enter the numbers of rows you want to print: "); 
     Scanner scan = new Scanner(System.in); 
     int numberOfRows = scan.nextInt(); 

     StringBuilder currentRow = new StringBuilder(); 
     for(int rowIndex = 1; rowIndex <= numberOfRows; rowIndex++){ 
      for(char currentCharacter = 'A'; currentCharacter < rowIndex + 'A'; currentCharacter++){ 
       currentRow.append(currentCharacter); 
      } 

      int numberOfSpacesNeeded = numberOfRows - rowIndex; 
      char[] spaces = new char[numberOfSpacesNeeded]; 
      Arrays.fill(spaces, ' '); 

      System.out.println(currentRow.toString() + new String(spaces) + currentRow.reverse().toString()); 

      //Reset StringBuilder 
      currentRow = new StringBuilder(); 
     } 
    } 
} 
+0

Я думал, может быть, вы могли бы добавить мой код, поскольку я новичок в JAVA Programming и не знаю эту библиотеку и методы так ясно. –

+1

Я надеялся, что введение чего-то нового может помочь вам в будущем, поэтому я включил некоторые ссылки в свой ответ на то, где больше информации было доступно. Я рад ответить на любые ваши вопросы о том, что я опубликовал – Peter

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