【问题标题】:Having trouble printing to same line打印到同一行时遇到问题
【发布时间】:2017-04-12 09:55:06
【问题描述】:

我正在尝试编写代码,您在控制台中输入一个整数,然后您输入的整数显示得更大,由字母组成(如 ascii 艺术)。

假设输入是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 作为我的代码的单个输出.. 也许有一种简单的方法可以解决这个问题,最好不要更改我的整个代码?我可以想象它也可以用二维数组来完成,但不确定。提示也很受欢迎。这不是功课。

【问题讨论】:

  • println 插入新行 - print 没有。但是你需要逐行打印,即改变你的循环逻辑。
  • @assylias 我知道,但这怎么能在这里工作?如果我用 print 替换 println,输出看起来会更可怕:D
  • 您当前的逻辑与要求相差甚远,因为您是垂直打印但您想水平打印。
  • 使用 StringBuffer 并为每一行追加。

标签: java printing output


【解决方案1】:

脏但有效:

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】:

    使用StringStringBuilder 存储每一行​​并最后打印所有字符串。

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

    【讨论】:

    • 可以用StringBuffer替换String
    • StringBuffer 已过时。您可能指的是 StringBuilder。
    • @ Assylias在此代码中我不认为代码优化......根据我的理解,他们是初学者优化的代码难以理解。 (我尝试对现有代码进行最小的更改)
    【解决方案3】:

    建议逻辑:

    • 将字符串逐行放入数组中:

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

    【讨论】:

      【解决方案4】:

      使用字符串数组存储每个数字的多行表示,然后使用映射存储所有数字。字符串编号可以作为键,它会返回该字符串编号的字符串数组表示。

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

      【讨论】:

        猜你喜欢
        • 2014-11-07
        • 1970-01-01
        • 2022-01-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多