打印一个矩形 - 我想要一个额外的打印,但我不能让它工作

时间:2016-12-20 19:44:24

标签: java for-loop printing syntax

让我自己学习java中的编程,尤其是打印。

例如,我们输入了8。然后我们必须得到一个由“+”组成的矩形作为输出,所以它看起来像这样:

++++++++
+      +
+      +
+      +
+      +
+      +
+      +
+      +
++++++++

以下代码将执行此操作(如果您希望我解释它,请告诉我,我会这样做):

public class Printest{
    public static void main(String[] args){

        int x = Integer.parseInt(args[0]);
        for(int i=0; i<x; i++){
            System.out.print("+");
        }
        System.out.println("");
        for(int i=0; i<x-1; i++){
            System.out.print("+");
            for(int j=0; j<x-2; j++){
                System.out.print(" ");
            }
            System.out.print("+");
            System.out.println("");
        }
        for(int j=0; j<x; j++){
            System.out.print("+");
        }
    }
}

但是现在我想添加一个额外的功能,所以这个方块里面有一个十字架,我怎么能这样做?我试图添加一些if语句,但我总是最终移动矩形左右边缘..:/

我希望它看起来更精确:

+++++++++
+*     *+
+ *   * +
+  * *  +
+   *   +
+  * *  +
+ *   * +
+*     *+
+++++++++

你会怎么做? if语句似乎不起作用,我觉得由于多个独立的for循环,我不可能在我的代码中实现它。?

顺便说一句,有没有更简单的方法来完成这项工作(只需打印矩形)?我想我采取了一种非常复杂和无效的方式。如果它们不复杂,我会非常有兴趣了解更简单的方法:P

2 个答案:

答案 0 :(得分:0)

  

顺便说一句,有没有更简单的方法来完成这项工作(只需打印矩形)?我想我采取了一种非常复杂和无效的方式。

其实是的!您可以使用2个for循环执行此操作:

public class RectangleWithShapesExample {
    public static void main(String[] args) {
        int number = 8;

        for (int i = 0; i < number; i++) {
            for (int j = 0; j < number; j++) {
                if (i == 0 || i == number - 1) {
                    System.out.print("+");
                } else {
                    if (j == 0 || j == number - 1) {
                        System.out.print("+");
                    } else {
                        System.out.print(" ");
                    }
                }
            }
            System.out.println("");
        }
    }
}

仅此一项,打印大小为8的矩形,然后,如果添加此else-if语句:

else if (i == j || i == (number - j - 1)) {
    System.out.print("*");
} 

上面的第一个条件告诉你的程序打印一个*对角线,如下所示:\(那个方向),第二个条件,评估它以向另一个方向打印它({{1 }})

你可以打印/十字架,所以,最后整个程序看起来像这样:

*

它的输出是:

public class RectangleWithShapesExample {
    public static void main(String[] args) {
        int number = 9;

        for (int i = 0; i < number; i++) {
            for (int j = 0; j < number; j++) {
                if (i == 0 || i == number - 1) {
                    System.out.print("+");
                } else {
                    if (j == 0 || j == number - 1) {
                        System.out.print("+");
                    } else if (i == j || i == (number - j - 1)) {
                        System.out.print("*");
                    } else {
                        System.out.print(" ");
                    }
                }
            }
            System.out.println("");
        }
    }
}

有9个元素:

++++++++
+*    *+
+ *  * +
+  **  +
+  **  +
+ *  * +
+*    *+
++++++++

作为建议,我建议您在变量中添加一些操作符号,以使代码更具可读性,并使变量更具描述性(例如+++++++++ +* *+ + * * + + * * + + * + + * * + + * * + +* *+ +++++++++ x)< / p>

答案 1 :(得分:0)

你需要找到十字架/星星的角落之间的关系。以这颗星为例,大小为5。

  0 1 2 3 4
0 *       *
1   *   *
2     *
3   *   *
4 *       *

在从(0,0)到(4,4)的对角线的十字中,索引是相同的(在代码中这意味着row == col)。

另外,您可以注意到,在从(0,4)到(4,0)索引的对角线中,索引始终总计为4,即size - 1(在代码中为row + col == size - 1

因此,在代码中,您需要循环遍历行,然后遍历列。每次你必须检查是否满足上述条件。

对于+边框,只需检查rowcol何时为0,以及何时等于size - 1

最后,您首先打印边框,使十字形的角不是*,而是+

<强>代码:

class Main {
  public static void main(String[] args) {
    printCross(8); //Vertical size of rectangle/cross
  }

  public static void printCross(int size) {
    for (int row = 0; row < size; row++) {
      for (int col = 0; col < size; col++) {
        if (row == 0 || col == 0 || row == size - 1 || col == size - 1)
          System.out.print('+');
        else if (row == col || row + col == size - 1)
          System.out.print('*');
        else
          System.out.print(" ");
      }
      System.out.println();
    }
  }
}

试试here!