我的代码如下所示:
public class HourGlass{
public static final int x = 5;
public static void wall(){
System.out.println("|\"\"\"\"\"\"\"\"\"|");
}
public static void top(){
for (int i = 1;i<=x;i++){
for (int j =1; j<=i; j++){
System.out.print(" ");
}
System.out.print("\\");
for (int k = 1; k <= 9-2*i ;k++){
System.out.print(":");
}
System.out.print("/\n");
}
}
public static void bottom(){
for (int i = 1;i <= x; i++){
for (int j = 1; j<= 5-i; j++){
System.out.print(" ");
}
System.out.print("/");
for (int k = 1; k <= 2*i-1; k++){
System.out.print(":");
}
System.out.print("\\\n");
}
}
public static void main(String[] args){
wall();
top();
bottom();
wall();
}
}我得到了这个:
|"""""""""|
\:::::::/
\:::::/
\:::/
\:/
\/
/:\
/:::\
/:::::\
/:::::::\
/:::::::::\
|"""""""""|我该如何修复这个问题并制作底部和顶部的比例呢?我试图找出如何解决这个问题,但我相当卡住了,没有找到任何东西。
发布于 2018-10-09 12:08:00
这段代码可以变得不那么死板,然而,这不是你的问题。为了使顶部和底部匹配,您需要忽略没有冒号的顶行。
我将x变量改为大写的X,因为它是一个常量,并对top()和wall()代码做了几个t周的修改。
public static final int X = 5;
public static void wall() {
System.out.println("|\"\"\"\"\"\"\"\"\"\"\"|");
}
public static void top() {
for (int i = 1; i <= X + 1; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(" ");
}
System.out.print("\\");
for (int k = 1; k <= 9 - 2 * (i - 1); k++) {
System.out.print(":");
}
System.out.print("/\n");
}
}希望这能有所帮助
发布于 2018-10-09 12:53:57
如果有一种方法可以创建包含重复字符的字符串,我总是发现这些练习更容易编码。有other ways可以编写它,但这里有一种方法,使用递归方法,用最少的代码完成这项工作:
private static String repeat(char c, int count) {
return (count == 0 ? "" : c + repeat(c, count - 1));
}例如,如果调用repeat('*', 5),它将返回*****
有了它,你就可以很容易地打印沙漏了。我有点不确定沙漏的中心应该是什么,所以这里有两个方法。
带有偶数个冒号的沙漏
public static void printHourGlassEven(int size) {
System.out.println('|' + repeat('"', size * 2) + '|');
for (int i = 1; i <= size; i++)
System.out.println(repeat(' ', i) + '\\' + repeat(':', (size - i) * 2) + '/');
for (int i = size; i >= 1; i--)
System.out.println(repeat(' ', i) + '/' + repeat(':', (size - i) * 2) + '\\');
System.out.println('|' + repeat('"', size * 2) + '|');
}测试
printHourGlassEven(5);输出
|""""""""""|
\::::::::/
\::::::/
\::::/
\::/
\/
/\
/::\
/::::\
/::::::\
/::::::::\
|""""""""""|带有奇数个冒号的沙漏
public static void printHourGlassOdd(int size) {
System.out.println('|' + repeat('"', size * 2 - 1) + '|');
for (int i = 1; i < size; i++)
System.out.println(repeat(' ', i) + '\\' + repeat(':', (size - i) * 2 - 1) + '/');
System.out.println(repeat(' ', size) + 'X');
for (int i = size - 1; i >= 1; i--)
System.out.println(repeat(' ', i) + '/' + repeat(':', (size - i) * 2 - 1) + '\\');
System.out.println('|' + repeat('"', size * 2 - 1) + '|');
}测试
printHourGlassOdd(5);输出
|"""""""""|
\:::::::/
\:::::/
\:::/
\:/
X
/:\
/:::\
/:::::\
/:::::::\
|"""""""""|https://stackoverflow.com/questions/52712024
复制相似问题