我写了一些代码,你输入一个数字,让我们说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(" ##### ");
}
}
}
}
答案 0 :(得分:3)
显然,您正在使用println(),它使用换行符完成打印。正如你所注意到的那样,这让事情变得非常简单,因为你只需打印一个数字的星星;逐行。
如果您现在想要在同一行上打印数字;只是一个让你走的提示:先手动绘制那个东西。用一支笔和一张纸自己制作星星/圆点。
换句话说:您的代码需要在各个方面进行重新设计(毫无疑问,最终会更复杂)。
您必须考虑以下事项:
提示:一种解决方案是研究双暗阵列。每个数字一个这样的数组;表示该数字所需的不同行的行,表示实际打印的字符的列。
希望足以让你前进。
答案 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;);