如何更改此代码以便在同一行上打印?

时间:2016-12-18 19:16:48

标签: java printing syntax printf

我写了一些代码,你输入一个数字,让我们说123。该号码将以更大的格式打印在控制台中。

代码如何工作?在这种情况下,它将获得输入123,然后它将分隔这个数字,并将知道每个数字。因此,它会知道数字123由数字1, 2, 3组成。

然后检查,如果我们有数字1,那么以更大的格式打印1,如果我们有数字5,那么5更大等。

我的代码似乎很好,但是一个巨大的问题是,正如预期的那样,每个数字都印在另一个数字下面。

我想知道我要做什么,所以每个数字都会打印在同一行,这样看起来更好更逼真?

我希望我不必为此改变我的整个代码?

import java.util.Scanner;
public class Printer {
    public static void main (String[] args){
        Scanner input = new Scanner(System.in);
        int x = input.nextInt();

        String number = String.valueOf(x);
        for(int i=0; i<number.length();i++){
            int j = Character.digit(number.charAt(i), 10);

            if(j==0){
                System.out.println("  ###  ");
                System.out.println(" #   # ");
                System.out.println("#     #");
                System.out.println("#     #");
                System.out.println("#     #");
                System.out.println(" #   # ");
                System.out.println("  ###  ");
            }
            if(j==1){
                System.out.println("  #  ");
                System.out.println(" ##  ");
                System.out.println("# #  ");
                System.out.println("  #  ");
                System.out.println("  #  ");
                System.out.println("  #  ");
                System.out.println("#####");
            }
            if(j==2){
                System.out.println(" ##### ");
                System.out.println("#     #");
                System.out.println("      #");
                System.out.println(" ##### ");
                System.out.println("#      ");
                System.out.println("#      ");
                System.out.println("#######");
            }
            if(j==3){
                System.out.println(" ##### ");
                System.out.println("#     #");
                System.out.println("      #");
                System.out.println(" ##### ");
                System.out.println("      #");
                System.out.println("#     #");
                System.out.println(" ##### ");
            }
            if(j==4){
                System.out.println("#      ");
                System.out.println("#    # ");
                System.out.println("#    # ");
                System.out.println("#    # ");
                System.out.println("#######");
                System.out.println("     # ");
                System.out.println("     # ");
            }
            if(j==5){
                System.out.println("#######");
                System.out.println("#      ");
                System.out.println("#      ");
                System.out.println("###### ");
                System.out.println("      #");
                System.out.println("#     #");
                System.out.println(" ##### ");
            }
            if(j==6){
                System.out.println(" ##### ");
                System.out.println("#     #");
                System.out.println("#      ");
                System.out.println("###### ");
                System.out.println("#     #");
                System.out.println("#     #");
                System.out.println(" ##### ");
            }
            if(j==7){
                System.out.println("#######");
                System.out.println("#    # ");
                System.out.println("    #  ");
                System.out.println("   #   ");
                System.out.println("  #    ");
                System.out.println("  #    ");
                System.out.println("  #    ");
            }
            if(j==8){
                System.out.println(" ##### ");
                System.out.println("#     #");
                System.out.println("#     #");
                System.out.println(" ##### ");
                System.out.println("#     #");
                System.out.println("#     #");
                System.out.println(" ##### ");
            }
            if(j==9){
                System.out.println(" ##### ");
                System.out.println("#     #");
                System.out.println("#     #");
                System.out.println(" ######");
                System.out.println("      #");
                System.out.println("#     #");
                System.out.println(" ##### ");
            }
        }
    }
}

4 个答案:

答案 0 :(得分:3)

显然,您正在使用println(),它使用换行符完成打印。正如你所注意到的那样,这让事情变得非常简单,因为你只需打印一个数字的星星;逐行。

如果您现在想要在同一行上打印数字;只是一个让你走的提示:先手动绘制那个东西。用一支笔和一张纸自己制作星星/圆点。

换句话说:您的代码需要在各个方面进行重新设计(毫无疑问,最终会更复杂)。

您必须考虑以下事项:

  • 我可以在一行上放多少颗星
  • 我如何表示我的数据,以便我可以将数字y的“行x”的星号放在数字z的“行x”的星号后面

提示:一种解决方案是研究双暗阵列。每个数字一个这样的数组;表示该数字所需的不同行的行,表示实际打印的字符的列。

希望足以让你前进。

答案 1 :(得分:2)

您需要提取用于显示一位数的机制,以及打印所有数字的常规方法。您可以从将数字提取到String[][]之类的

开始
static final String[][] digits = { //
        { //
                "  ###  ", //
                " #   # ", //
                "#     #", //
                "#     #", //
                "#     #", //
                " #   # ", //
                "  ###  " //
        }, { //
                "  #  ", //
                " ##  ", //
                "# #  ", //
                "  #  ", //
                "  #  ", //
                "  #  ", //
                "#####" //
        }, { //
                " ##### ", //
                "#     #", //
                "      #", //
                " ##### ", //
                "#      ", //
                "#      ", //
                "#######" //
        }, { //
                " ##### ", //
                "#     #", //
                "      #", //
                " ##### ", //
                "      #", //
                "#     #", //
                " ##### ", //
        }, { //
                "#      ", //
                "#    # ", //
                "#    # ", //
                "#    # ", //
                "#######", //
                "     # ", //
                "     # " //
        }, { //
                "#######", //
                "#      ", //
                "#      ", //
                "###### ", //
                "      #", //
                "#     #", //
                " ##### " //
        }, { //
                " ##### ", //
                "#     #", //
                "#      ", //
                "###### ", //
                "#     #", //
                "#     #", //
                " ##### " //
        }, { //
                "#######", //
                "#    # ", //
                "    #  ", //
                "   #   ", //
                "  #    ", //
                "  #    ", //
                "  #    " //
        }, { //
                " ##### ", //
                "#     #", //
                "#     #", //
                " ##### ", //
                "#     #", //
                "#     #", //
                " ##### " //
        }, { //
                " ##### ", //
                "#     #", //
                "#     #", //
                " ######", //
                "      #", //
                "#     #", //
                " ##### " //
        } };

然后你可以用它来构建像

这样的行
Scanner input = new Scanner(System.in);
int x = input.nextInt();
String number = String.valueOf(x);
int lineHeight = digits[0].length;
for (int i = 0; i < lineHeight; i++) {
    for (char ch : number.toCharArray()) {
        int j = Character.digit(ch, 10);
        System.out.print(digits[j][i] + " "); // <-- add a space to separate digits
    }
    System.out.println();
}

答案 2 :(得分:2)

问题是每次调用System.out.println(...)时都会打印一个新行。由于您为每封信件打电话,因此您不会将这些字母排成一行。

要解决此问题,您可以改为添加字符串(或StringBuilders)line1,line2,...,line7

然后,例如,不要对每个字母使用System.out.println(...),而是使用:

if(j==0){
    line1 = line1 + "  ###  ";
    line2 = line2 + " #   # ";
    line3 = line3 + "#     #";
    line4 = line4 + "#     #";
    line5 = line5 + "#     #";
    line6 = line6 + " #   # ";
    line7 = line7 + "  ###  ";
}

等。 然后在程序调用结束时:

System.out.println(line1)
System.out.println(line2)
System.out.println(line3)
System.out.println(line4)
System.out.println(line5)
System.out.println(line6)
System.out.println(line7)

答案 3 :(得分:-1)

而不是System.out.println(&#34; x&#34;);,只需使用System.out.print(&#34; x&#34;);