让我自己学习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
答案 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
)
因此,在代码中,您需要循环遍历行,然后遍历列。每次你必须检查是否满足上述条件。
对于+
边框,只需检查row
或col
何时为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!