首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我正在尝试用java做一个沙漏,就像ASCII艺术一样,谁的身高是由一个我可以改变的变量控制的

我正在尝试用java做一个沙漏,就像ASCII艺术一样,谁的身高是由一个我可以改变的变量控制的
EN

Stack Overflow用户
提问于 2018-10-09 09:13:37
回答 2查看 418关注 0票数 0

我的代码如下所示:

代码语言:javascript
复制
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();
}
}

我得到了这个:

代码语言:javascript
复制
|"""""""""|
 \:::::::/
  \:::::/
   \:::/
    \:/
     \/
    /:\
   /:::\
  /:::::\
 /:::::::\
/:::::::::\
|"""""""""|

我该如何修复这个问题并制作底部和顶部的比例呢?我试图找出如何解决这个问题,但我相当卡住了,没有找到任何东西。

EN

回答 2

Stack Overflow用户

发布于 2018-10-09 12:08:00

这段代码可以变得不那么死板,然而,这不是你的问题。为了使顶部和底部匹配,您需要忽略没有冒号的顶行。

我将x变量改为大写的X,因为它是一个常量,并对top()和wall()代码做了几个t周的修改。

代码语言:javascript
复制
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");
    }
}

希望这能有所帮助

票数 1
EN

Stack Overflow用户

发布于 2018-10-09 12:53:57

如果有一种方法可以创建包含重复字符的字符串,我总是发现这些练习更容易编码。有other ways可以编写它,但这里有一种方法,使用递归方法,用最少的代码完成这项工作:

代码语言:javascript
复制
private static String repeat(char c, int count) {
    return (count == 0 ? "" : c + repeat(c, count - 1));
}

例如,如果调用repeat('*', 5),它将返回*****

有了它,你就可以很容易地打印沙漏了。我有点不确定沙漏的中心应该是什么,所以这里有两个方法。

带有偶数个冒号的沙漏

代码语言:javascript
复制
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) + '|');
}

测试

代码语言:javascript
复制
printHourGlassEven(5);

输出

代码语言:javascript
复制
|""""""""""|
 \::::::::/
  \::::::/
   \::::/
    \::/
     \/
     /\
    /::\
   /::::\
  /::::::\
 /::::::::\
|""""""""""|

带有奇数个冒号的沙漏

代码语言:javascript
复制
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) + '|');
}

测试

代码语言:javascript
复制
printHourGlassOdd(5);

输出

代码语言:javascript
复制
|"""""""""|
 \:::::::/
  \:::::/
   \:::/
    \:/
     X
    /:\
   /:::\
  /:::::\
 /:::::::\
|"""""""""|
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52712024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档