我正在做这段代码的一部分,我必须打印一个方形轮廓。用户输入长度(行)和宽度(col),以及两个字符值,这两个字符值在打印时应该交替。现在我做了交换技巧,但它没有正常工作。我怎样才能改进它
是代码我的方法调用者是
String l = TextBox.textBoxString(5,5,'x','o');
System.out.print(l);
和我的方法是
public static String textBoxString(int rows, int cols, char c1, char c2) {
String result= "";
char temp2 = 0;
for (int i = 0; i <= rows -1; i++){
for (int j = 0; j <= cols-1; j++){
if(i == 0 || j == 0 || i == rows-1 || j == cols-1){
temp2 = c2;
c2 = c1;
c1 = temp2;
result += c2 +"";
}
else{
result += " ";
}
}
result += "n";
}
return result;
}
我的方法是打印这个
xoxox
o x
o x
o x
oxoxo
但是我不想让0出现在同一行,因为我们可以看到如果第一个是0那么最后一个应该是x。这样的
xoxox
o x
x o
o x
oxoxo
我该怎么做呢?试着把临时交换放在每个for循环中,但它仍然给了我错误的答案。有什么建议吗?
以及行和列根据用户输入而变化,因此可以是5,5和中午的字符应该重复。一个同事帮我改进了代码
仅在附加非空格时进行交换。但请注意,在5x5的情况下,当您位于第一列时,在第二行和最后一行之间,您不需要切换字符。
if(i == 0 || j == 0 || i == rows-1 || j == cols-1){
if (i >= rows - 1 || i < 2 || j != 0) {
// move the swapping code from outside to here
temp2 = c2;
c2 = c1;
c1 = temp2;
}
result += c2 +"";
}
else{
result += " ";
}
我还建议使用StringBuilder
而不是附加到String
,以避免创建大量字符串:
public static String textBoxString(int rows, int cols, char c1, char c2) {
StringBuilder result = new StringBuilder();
char temp2 = 0;
for (int i = 0; i <= rows -1; i++){
for (int j = 0; j <= cols-1; j++){
if(i == 0 || j == 0 || i == rows-1 || j == cols-1){
if (i >= rows - 1 || i < 2 || j != 0) {
temp2 = c2;
c2 = c1;
c1 = temp2;
}
result.append(c2);
}
else{
result.append(' ');
}
}
result.append('n');
}
return result.toString();
}