2017-04-12 96 views
3

我试图编写一个代码,您可以在控制台中输入一个整数,然后输入的整数显示为较大,由字母组成(如ascii art)。无法打印到同一行

让我们假设输入是112。然后输出将是

#  #  ##### 
    ##  ## #  # 
# #  # #   # 
    #  #  ##### 
    #  # #  
    #  # #  
##### ##### ####### 

我的代码将具有相同的输出,只是没有在同一行:(

它将记录下其他的一个数字。从我的代码,你可以看到为什么:

import java.util.Scanner; 
public class Tester { 
    public static void main(String[] args){ 
     Scanner input = new Scanner(System.in); 
     String any = input.nextLine(); 
     String[] sArray = any.split(""); 

     for(int i=0; i<sArray.length; i++){ 
      if(sArray[i].equals("1")){ 
       System.out.println(" # "); 
       System.out.println(" ## "); 
       System.out.println("# # "); 
       System.out.println(" # "); 
       System.out.println(" # "); 
       System.out.println(" # "); 
       System.out.println("#####"); 
      } 
      if(sArray[i].equals("2")){ 
       System.out.println(" ##### "); 
       System.out.println("#  #"); 
       System.out.println("  #"); 
       System.out.println(" ##### "); 
       System.out.println("#  "); 
       System.out.println("#  "); 
       System.out.println("#######"); 
      } 
     } 
    } 
} 

不知何故,我必须打印全部一次,println为我的代码单路输出不.. 也许有解决的是,最好在不改变我的整个代码一个简单的方法呢?我能想象它可能是用2d数组完成,但不确定。提示也非常受欢迎。这不是功课。

+1

'println'插入一个新行 - 'print'不行。但是你需要逐一打印这些行,即改变你的循环逻辑。 – assylias

+0

@assylias我知道,但这怎么能在这里工作?如果我将println替换为print,则输出看起来更加糟糕:D – cnmesr

+2

由于您正在垂直打印,但您想要水平打印,因此您的当前逻辑与要求相距甚远。 –

回答

2

使用String或StringBuilder存储每行并最后打印所有字符串。
逻辑

import java.util.Scanner; 
public class Tester { 
public static void main(String[] args){ 
    Scanner input = new Scanner(System.in); 
    String any = input.nextLine(); 
    String[] sArray = any.split(""); 
    String str1="";String str2="";String str3="";String str4="";String str5="";String str6="";String str7=""; 
    for(int i=0; i<sArray.length; i++){ 
     if(sArray[i].equals("1")){ 
      str1+=" # "; 
      str2+=" ## "; 
      str3+="# # "; 
      str4+=" # "; 
      str5+=" # "; 
      str6+=" # "; 
      str7+="#####"; 
     } 
     if(sArray[i].equals("2")){ 
      str1+=" ##### "; 
      str2+="#  #"; 
      str3+="  #"; 
      str4+=" ##### "; 
      str5+="#  "; 
      str6+="#  "; 
      str7+="#######"; 
     } 

    } 
    System.out.println(str1); 
    System.out.println(str2); 
    System.out.println(str3); 
System.out.println(str4); 
System.out.println(str5); 
    System.out.println(str6); System.out.println(str7); 
} 
} 
+0

您可以用StringBuffer替换String – gifpif

+2

StringBuffer已过时。你可能是指StringBuilder。 – assylias

+0

像你这样创建7个变量并不是很好的做法... – assylias

2

建议逻辑:

  • 代替串,一行行,在数组:

    private static final String[] ONE = { " # ", 
                 " ## ", 
                 ... }; 
    
  • 运行两个嵌套的for循环:

    for (int i = 0; i < heightOfPrintedDigits; i++) { 
        for (String number : sArray) { 
        ... //use print here but finish with an empty println("") to insert a new line 
        } 
    } 
    
3

肮脏的,但工程:

private static final Map<Integer, String[]> art = new HashMap<Integer, String[]>() {{ 
    put(1, new String[] { 
      " # ", 
      " ## ", 
      " # # ", 
      " # ", 
      " # ", 
      " # ", 
      " ##### " }); 
    put(2, new String[] { 
      " ##### ", 
      "#  #", 
      "  #", 
      " ##### ", 
      "#  ", 
      "#  ", 
      "#######" }); 
    }}; 

public static void main(String[] args) { 
    int[] input = { 1, 1, 2 }; 
    for (int row = 0; row < 7; row++) { 
     for (int num : input) { 
      System.out.print(art.get(num)[row] + " "); 
     } 
     System.out.println(); 
    } 
} 

我跳过了扫描仪代码和假设的1 1 2输入。

输出

#  #  ##### 
    ##  ## #  # 
# #  # #   # 
    #  #  ##### 
    #  # #  
    #  # #  
##### ##### ####### 
2

使用字符串数组来存储每个号码的多线表示,然后使用映射来存储所有的数字。一个字符串编号可以作为关键字,它将返回该字符串编号的字符串数组表示形式。

final int NUM_HEIGHT = 7; 
String any = "1 1 2"; 
String[] one = new String[] { 
    " # ", 
    " ## ", 
    "# # ", 
    " # ", 
    " # ", 
    " # ", 
    "#####"}; 
String[] two = new String[] { 
    " ##### ", 
    "#  # ", 
    "  # ", 
    " ##### ", 
    "#  ", 
    "#  ", 
    "####### "}; 
Map<String, String[]> map = new HashMap<>(); 
map.put("1", one); 
map.put("2", two); 

String[] numbers = any.split("\\s"); 
for (int i=0; i < NUM_HEIGHT; ++i) { 
    StringBuilder line = new StringBuilder(); 
    for (String number : numbers) { 
     line.append(map.get(number)[i]); 
     line.append(" "); 
    } 
    System.out.println(line); 
}