【问题标题】:Java String square patternJava 字符串方形模式
【发布时间】:2019-01-18 18:54:02
【问题描述】:

用户输入一个字符串,方法绘制一个正方形。 例如:

  • 对于输入= ram 方法绘制:
    r r r
    - a -
    m m m
  • 对于输入= code 方法绘制:
    c c c c
    - o o -
    - d d -
    e e e e
  • 对于输入 = coder 方法绘制:
    c c c c c
    - o o o -
    - - d - -
    - e e e -
    r r r r r

到目前为止,我已经设法画出这样的东西:
c - - - c
- o - o -
- - d - -
- e - e -
r - - - r

使用此代码:

static void pattern(String n) {
        int len = n.length();

        for (int i = 0; i < len; i++) {
            for (int j = 0; j < len; j++) {
                if((i==j)||(i==len-j-1)) {
                    System.out.printf("%c ", n.charAt(i));
                } else {
                    System.out.printf("- ");
                }
            }
            System.out.printf("%n");
        }

    }

我只设法使用if((i==j)||(i==len-j-1)) 进行对角线打印,但我不知道如何使它看起来像上面的示例。如何升级代码以正确绘制正方形?

【问题讨论】:

  • 您正确找到了应该打印字符的边界,但您准确地确定了边界,但跳过了它们之间的所有内容。这些范围内的任何元素都比左边界大,比右边界小。但考虑到中心边界正在切换,因此您可以尝试找到最小/最大边界作为左/右边界。

标签: java string sequence


【解决方案1】:
static void pattern(String n) {
        int len = n.length();
for (int i = 0; i < len; i++) {
    for (int j = 0; j < len; j++) {
        if((i<j)&&(i>len-j-1) || (i>j)&&(i<len-j-1)) {
            System.out.printf("- ");

        } else  {
            System.out.printf("%c ", n.charAt(i));
        }
    }
    System.out.printf("%n");
}

第一个条件

 (i>j)&&(i<len-j-1)

选择以下部分

x x x x x x x
- x x x x x x
- - x x x x x
- - - x x x x
- - x x x x x
- x x x x x x
x x x x x x x

 (i>j)&&(i<len-j-1)

选择以下部分

x x x x x x x
x x x x x x -
x x x x x - -
x x x x - - -
x x x x x - -
x x x x x x -
x x x x x x x

【讨论】:

    【解决方案2】:

    您可以使用双循环来打印二维数组。只需根据 raw 的索引在 raw 的开头和结尾计算 - 的数量。

    public static void pattern(String str) {
        for (int i = 0, last = str.length() - 1; i <= last; i++) {
            for (int j = 0, dash = last; j <= last; j++, dash--)
                System.out.print(i < j && i > dash || i > j && i < dash ? '-' : str.charAt(i));
    
            System.out.println();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多