2016-02-27 32 views
-1

我需要编写一个程序来读取字符串,然后根据字符串内的字符(来自用户输入)输出菱形形状。例如,如果用户输入品尝它应该打印在钻石如下: 小号 SAS SAMAS SAMPMAS SAMPLPMAS SAMPLELPMAS SAMPLPMAS SAMPMAS SAMAS SAS 小号基于字符串字符的菱形形状

我想通了如何打印无论输入是什么的第一个字母,都不知道如何去处理其他字母。 (这是正常的三角形,我假设倒之一将是非常相似的。)

import java.util.Scanner; 
public class PrintDiamond { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     Scanner input = new Scanner(System.in); 
     System.out.println("Please enter a string"); 
     String str = input.nextLine(); 
     int l=str.length()*2-1; 
     int m=str.length(); 
     for (int i=0; i<=m; i++) { 
      for (int j=0; j<=l; j++) { 
       if (j<=m-i) { 
        System.out.print(" "); 
       } else if (j==m) { 
        System.out.print(str.charAt(m-j)); 
       } else if (j>=m+i) { 
        System.out.print(" "); 
       } 
      } 
      System.out.print("\n"); 
     } 
    } 

} 

回答

0

我会建议使用一个StringBuilder和一个辅助方法来添加必要的空间,以保持菱形。

public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 
    System.out.println("Please enter a string"); 
    String str = input.nextLine(); 
    StringBuilder sb; 
    int i; 
    for(i=1; i<=str.length(); i++){ 
     System.out.print(addSpace(str.length()-i) + str.substring(0,i)); 
     if(i>1){ 
      sb = new StringBuilder(str.substring(0,i-1)); 
      sb = sb.reverse(); 
      System.out.print(sb.toString()) 
     } 
     System.out.println(); 
    } 
    for(i=str.length()-1; i>0; i--){ 
     System.out.print(addSpace(str.length()-i) + str.substring(0,i)); 
     if(i>1){ 
      sb = new StringBuilder(str.substring(0,i-1)); 
      sb = sb.reverse(); 
      System.out.print(sb.toString()) 
     } 
     System.out.println(); 
    } 
} 
public static String addSpace(int x){ 
    String s = ""; 
    for(int i=0; i<x; i++){ 
     s += " "; 
    } 
    return s; 
} 

还有一些需要考虑的事情:通过简单阅读下一行来使用,您允许空格。虽然这不会造成每个人的错误,但这与制作钻石形状的想法相矛盾。