创建一个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
以及如何仅针对循环或数组使用它。
答案 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();
}
}
输出正是您所要求的。