簡體   English   中英

無法打印到同一行

[英]Having trouble printing to same line

我正在嘗試編寫一個代碼,在控制台中輸入一個整數,然后輸入的整數顯示更大,由字母組成(如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作為我的代碼..也許有一個簡單的方法來解決這個問題,最好不要改變我的整個代碼? 我可以想象它也可以用二維數組完成,但不確定。 提示也非常受歡迎。 這不是功課。

骯臟但有效:

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

產量

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

使用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);
}
}

建議的邏輯:

  • 將數組中的字符串逐行放置:

     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 } } 

使用字符串數組存儲每個數字的多行表示,然后使用映射存儲所有數字。 字符串編號可以作為鍵,它將返回該字符串編號的字符串數組表示形式。

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM