有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在java中交替使用两个字符

我正在做这段代码的一部分,我必须打印一个正方形的轮廓。用户输入长度(行)和宽度(列),以及打印时应交替的两个字符值。现在我做了交换技巧,但它没有正常工作。我该如何改进它

这是密码 我的方法是

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

但我不想让o和我们看到的一样,如果第一个是o,那么最后一个应该是x。 像这样

xoxox
o   x
x   o
o   x
oxoxo

我该怎么做呢?我试着在每个for循环中加入临时交换,但它仍然给了我错误的答案。有什么建议吗

而且行和列也会根据用户的输入而改变,所以可以是5,5,并且字符的正午应该是重复的。一位同事帮助我改进了代码


共 (1) 个答案

  1. # 1 楼答案

    仅在附加非空白时交换。但请注意,在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();
    }