方形图案java

时间:2018-01-31 23:38:14

标签: java loops while-loop

创建一个void方法,它将像patern一样放在屏幕上:

  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

以及如何仅针对循环或数组使用它。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

玩得开心

public static void square(int side, char order){
    char x = (order=='x')?'x':'o';
    char o = (order=='x')?'o':'x';
    for ( int i = 0; i < side; i++ ) {
        for ( int j = 0; j < side; j++ )
            System.out.print((j%2==0)?x:o);
        System.out.println();
    }
}

输出正是您所要求的。