Я пытаюсь сделать узор (треугольник в java) - PullRequest
0 голосов
/ 13 апреля 2020

Я пытаюсь сделать этот шаблон в java:

* * * * * * * * 
* * * * * * * 
* * * * * * 
* * * * * 
* * * * 
* * * 
* * 
* 

Это код, который я написал:

package practise;
import java.util.Scanner;
public class PatternsUsingLoop {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();       
        for(int j=1;j<=n;j++) { 
            for(int k=n;k>=1;k--) {

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

пожалуйста, сообщите мне об ошибке

Ответы [ 4 ]

2 голосов
/ 13 апреля 2020

Есть много способов сделать это также, чтобы решить эту проблему. Одним из самых простых исправлений является замена внутреннего l oop следующим:

for (int k = (n - j) + 1; k >= 1; k--)

Поскольку вы хотите напечатать n число * с в первой строке, n - 1 число * s во второй строке и т. д., значение k должно быть инициализировано равным n, если j равно 1, n - 1, когда j равно 2 и т. д.

Некоторые другие способы выполнения этого требования следующие:

A.

for (int j = n; j >= 1; j--) {
    for (int k = j; k >= 1; k--) {
        System.out.print("* ");
    }
    System.out.println();
}

B.

for (int j = n; j >= 1; j--) {
    for (int k = 1; k <= j; k++) {
        System.out.print("* ");
    }
    System.out.println();
}

... и многие другие

Не стесняйтесь комментировать в случае каких-либо сомнений / проблем.

1 голос
/ 13 апреля 2020

Вы не уменьшаете конечное условие sh во внутреннем l oop. Это будет работать:

    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    for(int row=0;row<n;row++) { 
        for (int column = 0; column < n-row; column++) {
            System.out.print("* ");
        }
        System.out.println();
    }
0 голосов
/ 13 апреля 2020

Проблема в том, что вы не пытались отладить свой код. Для отладки вашего кода попробуйте распечатать переменные, которые вы используете в начале каждой строки, чтобы увидеть, соответствуют ли они вашим ожиданиям. Вы (надеюсь) подумали о коде, и что вы думаете , каждая переменная будет в каждой строке, так что вы что-то упустили, у вас есть ошибка.

Например, попробуйте это :

package practise;
import java.util.Scanner;
public class PatternsUsingLoop {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();       
        for(int j=1;j<=n;j++) { 
            System.out.print("j: " + j + " n: " + n);
            for(int k=n;k>=1;k--) {
                System.out.print("* ");
            }
            System.out.println();
        }
    }
}

Когда вы запустите, вы получите

j: 1 n: 5* * * * * 
j: 2 n: 5* * * * * 
j: 3 n: 5* * * * * 
j: 4 n: 5* * * * * 
j: 5 n: 5* * * * * 

Что показывает то, на что указывает пара других ответов, что n не меняется, поэтому вывод всегда 5 звезды.

Теперь вы можете выяснить ответ. (Подсказка: начните j с 0 и используйте k = nj)

0 голосов
/ 13 апреля 2020

Это очень маленькая ошибка, которую вы делаете, первая l oop верна, но во внутренней l oop вы снова печатаете n звездочек (от n до 1). Вам нужно напечатать (n - i + 1) звездочек для каждого l oop.

Используйте это изменение:

...
...
int n = sc.nextInt();       
        for(int j=1;j<=n;j++) { 
            for(int k=n-j+1;k>=1;k--) {

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

// ... означает тот же код //

...