[英]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.