我的作业是使用" +, - ,|"
制作形状我必须这样做:
+--+--+--+
| | | |
+--+--+--+
| | | |
+--+--+--+
| | | |
+--+--+--+
但我在输出中看到了这一点:
+--+--+--+
| | | |
+--+--+--+
| | | |
+--+--+--+
| | | |
+--+--+--+
| | | |
这是我的代码:
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("");
}
}
}
我知道我的错是在循环中但我找不到它,但它看起来像在最后一个循环中。 谢谢。
答案 0 :(得分:4)
我认为你可以通过使用不同的方法使它更清晰:
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();
}
答案 1 :(得分:1)
问题出在你的外循环运行4次。它将执行内部内容4次,这会使for循环打印|
个字符一个额外的时间。尝试向您|
循环添加一个条件,确保它比外循环少运行1次:
for (int i = 0; i <=9 && j < 3; i++)
答案 2 :(得分:0)
为了使它成为更好的代码,您应该学习的第一件事是通过私有方法使其可重用:例如,您应该编写私有方法来打印&#34; + - - + - + - +&#34;顺序,另一个打印&#34; | | | |&#34;序列
一旦实现了这一点,您将需要只有一个循环,没有IF,以产生所需的形状。而且,最后,你必须再次调用&#34; + - + - + - +&#34;方法
尝试这种方式,并了解如何制作更短,易于阅读和维护的程序。
答案 3 :(得分:0)
我稍微改变了你的代码:我添加了方法来提高易读性,并将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();
}