练习用它们之间的线条画出一个星号

时间:2015-11-19 11:56:11

标签: java

我目前正在学习java,其中一个练习就是用" n"高度和宽度均为星号," - "和" |"它们之间。 用户必须输入" n"并且应该相应地绘制正方形。 示例:

n = 3:
*-*-*
| | |
*-*-*
| | |
*-*-*

我的问题是发生了什么:

*-*-*
| | |
*-*-*
| | |
*-*-*
| | |

这是我的代码:(你能看出它的错误吗?应该很简单,但我无法理解它......)

{
public static void main(String[] args) {
        System.out.println("Criar quadrados de asteriscos e de hifens:");
        System.out.println("Qual o valor a atribuir a n?");
        Scanner teclado = new Scanner(System.in);
        int n = teclado.nextInt();
        int altura = n;
        int largura = n;

        for (int h = 0; h < altura ; h++) {

            System.out.printf("");
            for (int w = 0; w < largura - 1; w++) {
                System.out.print("*-");
            }
            System.out.println("*");
            for (int w2 = 0; w2 < largura - 2; w2++) {
                System.out.print("| ");
            } System.out.print("|");
            System.out.println(" |");
        }
    }

4 个答案:

答案 0 :(得分:1)

因为您需要检查h<altura-1

System.out.println("Criar quadrados de asteriscos e de hifens:");
System.out.println("Qual o valor a atribuir a n?");
Scanner teclado = new Scanner(System.in);
int n = teclado.nextInt();
int altura = n;
int largura = n;

for (int h = 0; h < altura ; h++) {

    System.out.printf("");
    for (int w = 0; w < largura - 1; w++) {
        System.out.print("*-");
    }
    System.out.println("*");

    if(h < altura - 1) {
        System.out.println("|");
        for (int w2 = 0; w2 < largura - 1 && h < altura -1; w2++) {
           System.out.print("| ");
        }
    }
}

如果您使用的是Java 8,您还可以使用StringJoiner来减少打印,并根据需要创建String。

System.out.println("Criar quadrados de asteriscos e de hifens:");
System.out.println("Qual o valor a atribuir a n?");
Scanner teclado = new Scanner(System.in);
int n = teclado.nextInt();
int altura = n;
int largura = n;
StringJoiner starJoiner = new StringJoiner("-");
StringJoiner lineJoiner = new StringJoiner(" ");
for(int h = 0 ;h<altura;++h) {
    starJoiner.add("*");
    lineJoiner.add("|");
}
for (int h = 0; h < altura ; h++) {
    System.out.println(starJoiner.toString());
    if (h<altura-1)
        System.out.println(lineJoiner.toString());
}

答案 1 :(得分:0)

为避免在末尾打印额外的管道,请添加条件if (h < altura - 1)以打印管道:

    for (int h = 0; h < altura; h++) {

        System.out.printf("");
        for (int w = 0; w < largura - 1; w++) {
            System.out.print("*-");
        }

        System.out.println("*");
        if (h < altura - 1) { // add this condition to avoid printing the extra line
            for (int w2 = 0; w2 < largura - 2; w2++) {
                System.out.print("| ");
            }

            System.out.print("|");
            System.out.println(" |");
        }
    }

答案 2 :(得分:0)

    for (int h = 0; h < altura ; h++) {

        System.out.printf("");
        for (int w = 0; w < largura - 1; w++) {
            System.out.print("*-");
        }
        System.out.println("*");
        if (h < altura-1) {
            for (int w2 = 0; w2 < largura - 2; w2++) {
                System.out.print("| ");
            } System.out.print("|");
            System.out.println(" |");
        }
    }

答案 3 :(得分:0)

产生“|”的代码在for循环中;运行“n”次。在这种情况下,“n”= 3,因此for循环运行三次。这意味着产生“|”的代码符号运行3次,而不是创建正方形所需的2次。

你需要考虑到“|”在写入第n行星号后不应出现符号。 :)