2

ユーザーからの入力として取得した文字列をピラミッド形式で文字ごとに印刷するのが好きです。例-ユーザーが「文字列」として入力を行うと、出力は次のようになります。

     s
    s t
   s t r
  s t r i
 s t r i n
s t r i n g

小さなプログラムを試しましたが、ピラミッド形式の単語が配置されていません。プログラムは

    import java.io.*;
    import java.util.Scanner;
    import java.lang.String;

    public class Mainer {
    public static void main(String args[]){
       try
       {
           Scanner sc = new Scanner(System.in);
           String s;
           int l;
           System.out.println("Enter the String : ");
           s = sc.nextLine();
           l = s.length();
           for(int i=0; i<l;i++)
           {

               for(int j=0;j<i;j++)
               {
                   System.out.printf("%c ",s.charAt(j));
               }
               System.out.printf("%c\n",s.charAt(i));
           }         

       }
       catch(Exception e)
       {
           System.err.println(e);
       }
    }
}

そして、上記のプログラムの出力は次のとおりです(文字列が入力として指定されている場合)文字列を入力してください:文字列

s
s t
s t r
s t r i
s t r i n
s t r i n g

最初の例としてアレンジできますか?

4

5 に答える 5

4

したがって、プログラムで行う必要があるのは、テキストをスペースで埋めることです。最初の例では、最初の出力は実際には1文字ですが、最後の出力の中央の文字と同じ位置にあります。

したがって、擬似コードの最初の出力は次のようになります。

String padding = (text.length/2) number of spaces;
// The padding on the left.
Print padding
// The letter to print.
Print first letter

パディングの長さは、その反復で出力するテキストの長さによって変わることに注意してください。ただし、そのことは説明しません。それはすべての楽しみを台無しにするでしょう:)

于 2013-03-05T16:07:05.893 に答える
2

文字列を出力する前に、文字列の半分の長さを文字列の前のスペース(パディング)の数として追加する必要があります。ただし、形状を作成するために反復するたびに1スペースを減算します。

または、別の言い方をすれば、元の文字列の長さを取得し、印刷しなかった文字のスペースの数を印刷しているということです。

for(int x = 0; x < l - i; x++) {
    System.out.print(" ");          
}
于 2013-03-05T16:15:59.623 に答える
1

スペースを印刷するために別のforループを書くだけです

for(int i=0; i<l;i++)
{

    for(int j=0; j<l-(i+1); j++)
    {
        System.out.print(" ");
    }

    for(int j=0;j<i;j++)
    {
        System.out.printf("%c ",s.charAt(j));
    }
    System.out.printf("%c\n",s.charAt(i));
}  

記録のために、これを微調整する必要があるかもしれません。

于 2013-03-05T16:05:57.483 に答える
1

これは浮気ですか?(ループは1つだけ)

String s = "string";
        int len = s.length();           
        String tmp = "";
        for (char c : s.toCharArray()) {
            tmp += tmp.length() > 0 ? " " + String.valueOf(c) : String.valueOf(c);
            System.out.printf("%" + (len + tmp.length() - 1) + "s\n", tmp);
            len--;
        }

出力:

     s
    s t
   s t r
  s t r i
 s t r i n
s t r i n g
于 2013-03-05T16:25:42.767 に答える
0

それはトリックを行う必要があります

import java.io.*;
import java.util.Scanner;
import java.lang.String;

public class Mainer {
public static void main(String args[]){
   try
   {
       Scanner sc = new Scanner(System.in);
       String s;
       int l;
       System.out.println("Enter the String : ");
       s = sc.nextLine();
       l = s.length();
       for(int i=0; i<l;i++)
       {
           int padding = s.length() - i;
           if (padding> 0) {
               System.out.printf("%" + padding + "s", " ");
           }
           for(int j=0;j<i;j++)
           {
               System.out.printf("%c ",s.charAt(j));
           }
           System.out.printf("%c\n",s.charAt(i));
       }         

   }
   catch(Exception e)
   {
       System.err.println(e);
   }
}
}
于 2013-03-05T16:15:17.657 に答える