2013-11-27 91 views
3

有沒有辦法創建這種排列,而String變量sh3影響邊界?我真的被困在這裏,我的Java知識幾乎侷限於你看到的東西,如果這有幫助嗎?使用System.out.println()創建邊框

System.out.println("###################################################"); 
System.out.println("# **** WEST END THEATRE BOOKING SYSTEM **** #"); 
System.out.println("#             #"); 
System.out.println("#     T I C K E T      #"); 
System.out.println("#             #"); 
System.out.println("#  Show: "+sh3+"       #"); 
System.out.println("#  Theatre: Her Majesty's      #"); 
System.out.println("#  Price: 65         #"); 
System.out.println("###################################################"); 
+5

這是一張不錯的門票! – Maroun

+3

非常不錯的排列方式:-D –

+1

循環中的打印空間基於總長度 - 字符串變量的長度 – Konstantin

回答

5

我知道我沒有提供這個代碼,但我指的是思考的過程,然後把實現留給你。

有4個遊戲中的屬性,其中你知道total size of line,你也知道length of the string,你知道有多少空間可以很容易找到。

所有你需要的是一個循環,它將計算應該留下多少空間。

enter image description here

+1

+1用於識別基本概念,而不是僅僅傾銷代碼。 –

+0

@AaronBlenkush謝謝。是的,它更好地展示道路,而不僅僅是給出整個代碼,而不是讓OP思考任何事情。恕我直言 –

6

既然你知道了線的長度,並且所有線路具有相同的長度,你可以做這樣的事情:

假設n是線的長度。由於sh3將從15個地方開始,因此您可以計算在sh3之後需要多少個空間。

System.out.println("#  Show: "+sh3+calcSpaces()+"#"); 

在哪裏,你知道的sh3長度calcSpaces可以很容易地實現..

private String calcSpaces(String sh3) { 
    String res = ""; 
    for(int i = 0; i < n - sh3.length(); i++){ 
     res += " "; //You might want to use StringBuilder instead.. 
    }    //it's a good practice, although performance is not 
}     //significant here 

我也建議你閱讀有關Formatter

+1

+1我想到的是:) – Keerthivasan

+0

我沒有測試'calcSpaces'方法,但概念很清楚。 – Maroun

+1

如果'sh3.length()'超過'n',需要注意。 –

2

您可以使用sh3.length() 獲得sh3的長度然後您可以添加空格以適合您的邊框。

int spacesNum = 35 - sh3.length(); 
String spaces = ""; 
for(int i = spacesNum; i > 0; i++){ 
    spaces += " "; 
} 

System.out.println("###################################################"); 
System.out.println("# **** WEST END THEATRE BOOKING SYSTEM **** #"); 
System.out.println("#             #"); 
System.out.println("#     T I C K E T      #"); 
System.out.println("#             #"); 
System.out.println("#  Show: "+sh3+spaces+"#"); 
System.out.println("#  Theatre: Her Majesty's      #"); 
System.out.println("#  Price: 65         #"); 
System.out.println("###################################################"); 
3

是的,它是取巧的辦法:

 String sh3 = "StackOverflow"; 
     String sh4 = ""; 
     for(int i=0;i<35-sh3.length();i++){ 
      sh4 += " "; 
     } 
     sh4 += "#"; 
     System.out.println("###################################################"); 
     System.out.println("# **** WEST END THEATRE BOOKING SYSTEM **** #"); 
     System.out.println("#             #"); 
     System.out.println("#     T I C K E T      #"); 
     System.out.println("#             #"); 
     System.out.println("#  Show: " + sh3 + sh4); 
     System.out.println("#  Theatre: Her Majesty's      #"); 
     System.out.println("#  Price: 65         #"); 
     System.out.println("###################################################"); 
3

,最快的方式是:

System.out.print("#  Show: " + sh3); 
for (int i = 0; i < 34-sh3.length(); i++) { 
    System.out.print(" "); 
} 
System.out.println(" #"); 
4

就個人而言,我會使用一個FormatterPrintStreamprintf()方法。

您可以使用printf()這樣的:

System.out.printf("#  Show: %-35#\n", sh3); 

當第一個字符串被打印出來,在它的%-35獲取與sh3加上一些空格代替。 %開始轉義序列,-使得sh3位於分配空間的左側,並且35sh3分配35個字符的空間。未填寫sh3的35個字符中的任何一個填充空格。

要詳細瞭解printf()的語法,請轉至here。編輯:我忘了提\n。在String中,\n是創建新行的轉義序列。例如: -

System.out.println("abc\n123"); 

相同

System.out.println("abc"); 
System.out.println("123"); 

printf(),不像println(),不會創建它打印String年底新線。 \n手動創建一個新行,這是使程序按預期行爲所必需的。