创建void方法,将这样的样式放在屏幕正方形上:

  xoxo
  xoxo
  xoxo
  xoxo


该方法的第一个参数将定义用于创建方形边的字符数量,第二个是第一个字符。

这是我的解决方案,但我想知道我是否可以用更少的代码来做到这一点。

static void square(char a, int b) {
 if (a == 'x') {
        for (int i = 0; i < b; i++) {

            int sum = 0;
            do {


                System.out.print("x");
                sum++;
                if (sum == b)
                    break;
                System.out.print("o");
                sum++;

            }
            while (sum != b);

            System.out.println();
        }

    } else {
        for (int i = 0; i < b; i++) {

            int sum = 0;
            do {


                System.out.print("o");
                sum++;
                if (sum == b)
                    break;
                System.out.print("x");
                sum++;

            }
            while (sum != b);

            System.out.println();
        }
    }
}


如何使图案看起来像

xoxox
oxoxo
xoxox
oxoxo
xoxox


以及如何仅使用for循环或数组来实现这一点。

最佳答案

O(n ^ 2)循环和恒定的O(k)空间。从0开始,一直保持字符交替,直到到达结尾(b ^ 2)。

char oth = (a == 'x') ? 'o' : 'x';
for (int i = 0; i < (b * b); i++) {
    System.out.print(i % 2 == 0 ? a : oth);
    if ((i + 1) % b == 0) {
        System.out.println();
    }
}


O(n)循环和O(n)空间。构造两个图案行以进行打印和替换。

char oth = (a == 'x') ? 'o' : 'x';
String x = (a == 'x') ? "xo" : "ox";

// Construct the two repeating patterns which will alternate
String first = String.join("", Collections.nCopies(b / 2, x));
String second = first;
if (b % 2 == 1) {
    second = new StringBuilder(first).reverse().toString();
    first += a;
    second += oth;
}
for (int i = 0; i < b; i++) {
    System.out.println(i % 2 == 0 ? first : second);
}


在此处查看输出:https://ideone.com/E3bVFK

关于java - 方形图案java,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48553221/

10-12 00:39