Нанесение алмаза из звездочек - PullRequest
0 голосов
/ 16 марта 2020

У меня есть эта программа, в которой вы вводите число, и оно печатает его в ромб. Я выровнял верхнюю половину и выяснил, просто не могу выровнять нижнюю половину. Предполагается, что go увеличится в количестве звездочек, а затем go уменьшится до единицы.

import java.util.Scanner;
public class Diamonds
{
    public static void main(String args[])
    {
        int n, i, j, space = 0;
        System.out.print("Enter the number of rows: ");
        Scanner s = new Scanner(System.in);
        n = s.nextInt();
        space = n - 0;
        for (j = 0; j <= n; j++)
        {
            for (i = 0; i < space; i++)
            {
                System.out.print(" ");
            }
                System.out.print("   ");
            space--;
            for (i = j; i <= 2 * j - 1; i++)
            {
                System.out.print("* ");
            }
            System.out.println("   ");
        }
        space = 0;
        for (j = n - 1  ; j > 0; j--)
        {
            for (i = 0; i <= i - n; i++)
            {
                System.out.print("   ");
            }

            System.out.print(" ");

            space--;

            for (i = j; i <= 2 * j - 1; i++)
            {
                System.out.print(" *");
            }
            System.out.println("  c ");
            space=n-1;
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 16 марта 2020

Ниже приведен код для нижней половины:

space += 2;
for (j = n - 1; j > 0; j--) {
    for (i = 0; i < space; i++) {
        System.out.print(" ");
    }
    System.out.print("   ");
    space++;
    for (i = j; i <= 2 * j - 1; i++) {
        System.out.print("* ");
    }
    System.out.println("   ");
}

Я только что повторно использовал код ваших внутренних циклов для верхней половины. Единственное, что нового в нем - это манипуляции с space.

Полный код:

import java.util.Scanner;

public class Diamonds {
    public static void main(String args[]) {
        int n, i, j, space = 0;
        System.out.print("Enter the number of rows: ");
        Scanner s = new Scanner(System.in);
        n = s.nextInt();
        space = n - 0;
        for (j = 0; j <= n; j++) {
            for (i = 0; i < space; i++) {
                System.out.print(" ");
            }
            System.out.print("   ");
            space--;
            for (i = j; i <= 2 * j - 1; i++) {
                System.out.print("* ");
            }
            System.out.println("   ");
        }
        space += 2;
        for (j = n - 1; j > 0; j--) {
            for (i = 0; i < space; i++) {
                System.out.print(" ");
            }
            System.out.print("   ");
            space++;
            for (i = j; i <= 2 * j - 1; i++) {
                System.out.print("* ");
            }
            System.out.println("   ");
        }
    }
}

Пример выполнения:

Enter the number of rows: 5

       *    
      * *    
     * * *    
    * * * *    
   * * * * *    
    * * * *    
     * * *    
      * *    
       *    
0 голосов
/ 16 марта 2020

Я переместил ваш ввод в панель параметров и очистил другой код:

public static void main(String [] args) {
    try {
        String amt = JOptionPane.showInputDialog("Enter number of rows:");
        int n = Integer.valueOf(amt);
        int space = n;
        for (int j = 0; j <= n; j++) {
            StringBuilder builder = new StringBuilder();
            IntStream.range(0, space).forEach(i -> builder.append(' '));
            builder.append("   ");
            space--;
            IntStream.range(j, 2*j).forEach(i -> builder.append("* "));
            System.out.println(builder);
        }
        space++;
        for (int j = n - 1; j > 0; j--) {
            space++;
            StringBuilder builder = new StringBuilder();
            IntStream.range(0, space).forEach(i -> builder.append(' '));
            builder.append("   ");
            IntStream.range(j, 2*j).forEach(i -> builder.append("* "));
            System.out.println(builder);
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
...