2016-06-18 4 views
-1

直角三角形とその鏡像があり、鏡像部分を見つけられないパターンを印刷しようとしています。次のコードを印刷するプログラム

パターン:私は印刷することができました

A  A 
AB  BA 
ABC CBA 
ABCD DCBA 
ABCDEDCBA 

パターン:ここ

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++)
    また、変数名を再利用することもできます。

  • あなたはchcharになりたい場合は、なぜそれcharしませんか?また、65ではなく、'A'を使用して初期化する必要があります。

  • なぜ2つのch変数が必要ですか?ちょうど1つ使ってください。

  • 最後の2つの点は、直接値を直接計算する必要があるため、2つの点が問題になります。 (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

、あなたはを利用する必要があります210だけでなく、append文字にすることができますが、reverseという文字列も使用できます。これはミラーリングのシナリオに最適です。 int ch = 65,ch1 = 65; 印刷する際に使用する:Arrays.fill()はあなたがここで「A」(65)の値を提供してきました、あなたのコードで

を助けることができるかもしれない、処理するための唯一の問題としてスペースを残します。しかしforループもcharと一緒に使用できます。つまり、このロジックを構造に組み込むことができます。

などのループを使用できます。ループの初期化が'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プログラミングの初心者であり、ライブラリとメソッドをあまり明確に知らないので、私のコードを追加できると思っていました。 –

+1

私は何か新しいものを紹介することが将来あなたを助けることができたと思っています。投稿した内容に関するご質問にはお答えできます – Peter

関連する問題