创建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/