2

我喜欢以 Pyramid 格式逐个字母地打印作为用户输入的字符串。例如 - 当用户将输入作为“字符串”提供时,输出应该是:

     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

所以你的程序需要做的是用空格填充文本。在您的第一个示例中,您的第一个输出实际上是一个字母,但与最后一个输出的中间字母的位置相同。

所以伪代码的第一个输出看起来像:

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

这是作弊吗?(只有一个循环)

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 回答