2016-06-18 18 views
-1

Ich habe versucht, ein Muster zu drucken, in dem es ein rechtes Dreieck und sein Spiegelbild gibt, und ich bin nicht in der Lage, den Spiegelbildteil herauszufinden.Ein Programm, das den folgenden Code ausgibt

Muster:

A  A 
AB  BA 
ABC CBA 
ABCD DCBA 
ABCDEDCBA 

Muster Ich habe in der Lage gewesen drucken zu:

A   A 
AB  AB 
ABC  ABC 
ABCD ABCD 
ABCDE ABCDE 

Hier ist der Code:

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(""); 
    } 
}; 

Antwort

0

Kommentare zum Code:

  • i,j,k,l; Was ist das? Hast du den Typ vergessen, d. H. int i,j,k,l;? Wenn dies der Fall ist, entferne die Linie und deklariere die Variablen, wo sie verwendet werden, z. for (int i=1;i<=n;i++).
    Sie können dann auch die Variablennamen wiederverwenden.

  • Wenn Sie ch wollen ein char sein, warum es keine char machen? Sie sollten auch 'A' verwenden, um es zu initialisieren, nicht 65.

  • Warum benötigen Sie zwei ch Variablen? Benutze einfach eins.

  • Die letzten beiden Punkte sind strittig, da Sie den Wert direkt berechnen sollten, z. (char)('A' + j).

  • Jetzt, da Sie das getan haben, sollte die letzte Schleife rückwärts zählen, um Buchstaben in umgekehrter Reihenfolge zu erhalten. (Spiegelbildteil)

  • Da Sie nur mittleren Buchstaben (E in Ihrem Beispiel) wollen einmal drucken, das heißt, Sie ungerade Anzahl von Räumen müssen, wenn sie nicht E Druck und keine Leerzeichen, wenn der Druck einzelnE. Der einfachste Weg, dies zu tun, ist, dass die letzte Zeile separat behandelt wird.

  • Keine Notwendigkeit, eine leere Zeichenfolge hinzuzufügen, wenn Newline gedruckt wird, d. H. println("")println().

  • Setzen Sie ; nicht nach Ihrer Methode, d. H. };}.

Dies ist das Ergebnis:

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

Ist die gewünschte Ausgabe nicht geben. –

0

Für Ihr spezielles Problem, Sie sollte einenutzen 210 als nicht nur erlaubt es Ihnen, append Zeichen, aber es ermöglicht Ihnen auch reverse die Zeichenfolge, die perfekt für Ihre Spiegelung Szenario ist. Verlassen die Räume als einzige Problem zu behandeln, die Arrays.fill() der Lage sein, mit

In Ihrem Code, um Ihnen den Wert von ‚A‘ zur Verfügung gestellt haben (65) hier: int ch = 65,ch1 = 65; zu verwenden beim Drucken. for Loops funktionieren jedoch auch mit char, was bedeutet, dass Sie diese Logik in die Struktur integrieren können

Wenn die Schleifeninitialisierung 'A' war, wäre dies dasselbe wie ab 'A'. Das Inkrement würde dies dann auf 'B', 'C' usw. aktualisieren, während es unter der Annahme läuft, dass Sie ++ verwenden. Es gibt Tutorials zur besseren Erklärung dieser

Durch die Verwendung von Variablennamen, die vermitteln, was Sie versuchen, zu tun, macht es einfacher zu verdichten/optimieren Sie Ihren Code, wie Sie es schreiben. Hoffentlich wird die SSCCE am Ende dieser Antwort kann die Vorteile dieses hervorzuheben, wie diese Zeile: 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

Ich dachte, du könntest vielleicht meinen Code anhängen, da ich ein Neuling in JAVA Programming bin und die Bibliothek und Methoden nicht so klar kenne. –

+1

Ich hatte gehofft, dass die Einführung von etwas Neuem Ihnen in Zukunft helfen könnte, weshalb ich einige Links in meine Antwort eingefügt habe, wo mehr Informationen verfügbar waren. Gerne beantworte ich Ihre Fragen zu dem, was ich gepostet habe – Peter

Verwandte Themen