有 Java 编程相关的问题?

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

在Java中使用“+,”循环绘制形状

我的作业是用“+,-,|”做形状

我必须这样做:

+--+--+--+
|  |  |  |
+--+--+--+
|  |  |  |
+--+--+--+
|  |  |  |
+--+--+--+

但我在输出中看到了这一点:

+--+--+--+
|  |  |  |
+--+--+--+
|  |  |  |
+--+--+--+
|  |  |  |
+--+--+--+
|  |  |  |

这是我的密码:

public class Method {

        void MakingShapes()
            {
                for (int j = 0; j <= 3; j++) {

                    for (int i = 0; i <=9; i++) {

                        if(i%3==0)
                        {
                            System.out.print("+");
                        }

                        else
                        {
                            System.out.print("-");
                        }
                    }

                    System.out.print("\n");

                    for (int i = 0; i <=9; i++) {

                        if(i%3==0)
                        {
                            System.out.print("|");

                        }
                        else
                        {
                            System.out.print(" ");
                        }
                    }
                    System.out.println("");

                }
            }
        }

我知道我的错误在循环中,但我找不到它,但它看起来像是在最后一个循环中。 多谢各位


共 (4) 个答案

  1. # 1 楼答案

    为了使其成为更好的代码,您应该学习的第一件事是通过私有方法使其可重用:例如,您应该编写一个私有方法来打印“+--+--+--+”序列,另一个方法来打印“| | | |”序列

    一旦实现了这一点,你只需要一个循环,没有IFs,就可以产生所需的形状。最后,您必须再次调用“+--+--+--+--+”方法

    试着用这种方法,并意识到你将如何生成一个简短、易于阅读和维护的程序

  2. # 2 楼答案

    问题在于你的外环跑了4次。它将执行内部内容4次,这将导致for循环额外打印|字符。尝试向|循环添加一个条件,确保其运行时间比外部循环少1倍:

    for (int i = 0; i <=9 && j < 3; i++)
    
  3. # 3 楼答案

    我认为你可以通过使用不同的方法使它更清晰:

      private void verticalLine() {
        for (int i = 0; i <= 9; i++) {
    
          if (i % 3 == 0) {
            System.out.print("|");
    
          } else {
            System.out.print(" ");
          }
        }
        System.out.println("");
      }
    
      private void horizontalLine() {
        for (int i = 0; i <= 9; i++) {
    
          if (i % 3 == 0) {
            System.out.print("+");
          }
    
          else {
            System.out.print("-");
          }
        }
    
        System.out.print("\n");
      }
    

    你的方法变成:

      void MakingShapes() {
        for (int j = 0; j <= 3; j++) {
          horizontalLine();
          verticalLine();
        }
      }
    

    很明显,在循环结束后,你只需要额外的horizontalLine()调用来结束显示。正如@JamesC在评论中指出的那样。TaylorIV,要获得目标输出,还需要将循环减少到只运行三次:

      void MakingShapes() {
        for (int j = 0; j < 3; j++) {
          horizontalLine();
          verticalLine();
        }
        horizontalLine();
      }
    
  4. # 4 楼答案

    1. 我建议以不同的格式设置括号(同一行开头的卷曲括号)。这样可以节省一些垂直空间,代码更清晰
    2. 我稍微修改了你的代码:我添加了一些方法来提高易读性,并将if语句改为内联语句(同样,为了减少所需的垂直空间,从而提高可读性)

      private void printHorizontalLine() {
          for (int i = 0; i <= 9; i++) {
              System.out.print((i % 3 == 0) ? "+" : "-");
          }
      }
      
      private void printCells() {
          for (int i = 0; i <= 9; i++) {
              System.out.print((i % 3 == 0) ? "|" : " ");
          }
      }
      
      void MakingShapes() {
          for (int j = 0; j <= 3; j++) {
              this.printHorizontalLine();
              System.out.println();
              this.printCells();
              System.out.println();
          }
          this.printHorizontalLine();
      }