用“+、-、|”绘制形状在 Java
Drawing shapes with "+,-,|" in 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次。它将执行内部内容 4 次,这会导致 for 循环额外打印 |
个字符。尝试为你的 |
循环添加一个条件,确保它比外部循环少运行 1 次:
for (int i = 0; i <=9 && j < 3; i++)
我认为您可以使用不同的方法使其更清晰:
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();
}
为了使其成为更好的代码,您首先应该学习的是通过私有方法使其可重用:例如,您应该编写一个私有方法来打印“ +--+--+--+”序列,另一个打印“| | | |”顺序。
完成此操作后,您将只需要 一个循环,无需 IF,即可生成所需的形状。最后,您必须再次调用“+--+--+--+”方法。
尝试这种方式并了解如何生成更短、易于阅读和维护的程序。
- 我建议以不同的方式设置括号的格式(左大括号在同一行)。这节省了一些垂直space并且代码更清晰。
我稍微更改了您的代码:我添加了一些方法来提高易读性,并将 if 语句更改为内联语句(再次减少垂直 space 的需要,从而提高可读性)。
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();
}
我的作业是用“+,-,|”做形状
我必须这样做:
+--+--+--+
| | | |
+--+--+--+
| | | |
+--+--+--+
| | | |
+--+--+--+
但我在输出中看到了这一点:
+--+--+--+
| | | |
+--+--+--+
| | | |
+--+--+--+
| | | |
+--+--+--+
| | | |
这是我的代码:
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次。它将执行内部内容 4 次,这会导致 for 循环额外打印 |
个字符。尝试为你的 |
循环添加一个条件,确保它比外部循环少运行 1 次:
for (int i = 0; i <=9 && j < 3; i++)
我认为您可以使用不同的方法使其更清晰:
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();
}
为了使其成为更好的代码,您首先应该学习的是通过私有方法使其可重用:例如,您应该编写一个私有方法来打印“ +--+--+--+”序列,另一个打印“| | | |”顺序。
完成此操作后,您将只需要 一个循环,无需 IF,即可生成所需的形状。最后,您必须再次调用“+--+--+--+”方法。
尝试这种方式并了解如何生成更短、易于阅读和维护的程序。
- 我建议以不同的方式设置括号的格式(左大括号在同一行)。这节省了一些垂直space并且代码更清晰。
我稍微更改了您的代码:我添加了一些方法来提高易读性,并将 if 语句更改为内联语句(再次减少垂直 space 的需要,从而提高可读性)。
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(); }