2013-11-27 62 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手动创建一个新行,这是使程序按预期行为所必需的。