Печать центрированной пирамиды в Java с возрастающими и убывающими числами - PullRequest
1 голос
/ 26 февраля 2012

Link to what I want and what I have

Я пытаюсь напечатать центрированную пирамиду из 2 ^ n, где 2 ^ row # - это центрированное число каждой строки, числа слева возрастают до 2 ^ строки# и цифры справа уменьшаются.Я довольно новичок в Java, и мне потребовалось очень много времени, чтобы получить это.Но сейчас я застрял.Последняя строка является единственной верной строкой.Я не знаю, как сделать так, чтобы 64 печаталось не на каждой строке.Кто-нибудь может дать мне подсказку?

Я пытался связываться с каждым параметром - начиная последний цикл с первой строки, последней строки, изменяя начальную мощность и т. Д., И я просто не могупонять это.

Спасибо за любые подсказки!

public static void main (String [] args){

    int row;
    for (row = 0; row <= 8; row++){ // Prints each row 
        for (int spaces = 8; spaces >= row; spaces --){ // Prints out spaces to left
            System.out.print("  ");
        }

        int power1 = 0; // Power that 2 is being raised to
        for (int i = 0; i < row; i++) { // Prints left side of the pyramid 
            System.out.print(" " + (int)Math.pow(2, power1));
            power1++;
        }

        int power2 = 7;
        for (int i = 1; i < row; i++) { // Prints right side of the pyramid 
            power2--;
            System.out.print(" " + (int)Math.pow(2, power2));       
        }

        System.out.println();
    }       
  }
}

Ответы [ 3 ]

2 голосов
/ 26 февраля 2012

Ваша проблема заключается в том, что вы всегда начинаете правую сторону пирамиды с 2 ^ 7, так как вы жестко программируете декларацию и назначение power2 = 7.Если вместо этого вы начнете это значение в текущей строке - 1, вы получите искомое поведение.Код:

public static void main (String [] args){

int row;
for (row = 0; row <= 8; row++){ // Prints each row 
    for (int spaces = 8; spaces >= row; spaces --){ // Prints out spaces to left
        System.out.print("  ");
    }

    int power1 = 0; // Power that 2 is being raised to
    for (int i = 0; i < row; i++) { // Prints left side of the pyramid 
        System.out.print(" " + (int)Math.pow(2, power1));
        power1++;
    }

    int power2 = row - 1;
    for (int i = 1; i < row; i++) { // Prints right side of the pyramid 
        power2--;
        System.out.print(" " + (int)Math.pow(2, power2));       
    }

    System.out.println();
}
1 голос
/ 26 февраля 2012

Эта часть неверна.

        int power2 = 7;
    for (int i = 1; i < row; i++) { // Prints right side of the pyramid 
        power2--;
        System.out.print(" " + (int)Math.pow(2, power2));       
    }

В строке 2 вы получаете power2 = 6, поэтому отображаете 2 ^ 6 = 64.

Вместо этого вы должны делать что-то вроде

        int power2 = power1;  
    for (int i = 1; i < row; i++) { // Prints right side of the pyramid 
        power2--;
        System.out.print(" " + (int)Math.pow(2, power2));       
    }
0 голосов
/ 26 февраля 2012

Вы присваиваете константу power2 вместо зависимости значения в строке.Можете ли вы попробовать это, пожалуйста.

int power2 = row-1;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...