2013-12-16 2 views
0

Я пытаюсь нарисовать треугольник Паскаля в JavaКак напечатать двумерный массив внутри для цикла в Java

Вот мой код

static void printPascalTriangle(int length){    
    int[][] pascal=new int[length][length]; 

    for (int i = 0; i < length; i++) { 
     pascal[0][i]=1; 
     pascal[i][0]=1; 
    } // here length is the dimension of pascal triangle , first loop is for filling up the first row and column with zero 

    for (int row = 1; row < length; row++) { 
     for (int column = 1; column < length-row; column++) { 
      pascal[row][column]=pascal[row][column-1]+pascal[row-1][column]; 
     } 

    } // this loop is for filling up the rest of position 

    for (int row = 0; row < length; row++) { 
     for (int column = 0; column < length-row; column++) { 
      pr(pascal[row][column]+"\t"); 
     } 
     prln("\n"); 

    } // this loop is for printing the array 



} 


static void prln(Object anyObject){ 
    System.out.println(anyObject); 
} 

static void pr(Object anyObject){ 
    System.out.print(anyObject); 
} 

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

+0

Является ли это домашнее задание? – PhoneixS

+2

Если этот код работает, вопрос лучше подходит для codereview.stackexchange.com – turbo

+0

Почему вы хотите избежать второго цикла? –

ответ

1

Использование this formula мы получаем алгоритм:

// for each row 
for (int row = 0; row < length; row++) { 
    // the value of the previous column in this row 
    // it doesn't really matter what we initialize this to 
    // since we never use the initial value anyway 
    int previous = 1; 

    // for each column in this row 
    // row 0 has 1 column and each subsequent row has one more 
    for (int column = 0; column <= row; column++) { 
     // the value of the current column in the row 
     // the default value is 1, since that is always the value 
     // of the first column in every row 
     int current = 1; 

     // if the current column isn't the first, use formula 
     // from the wikipedia article to compute the current column 
     if (column != 0) { 

      // we cast 'column' to a double so that the decimal does not get 
      // truncated during division 
      current = (int) (previous * ((row + 1 - column)/(double) column)); 
     } 

     // print out the current column followed by a space 
     System.out.print(current + " "); 

     // set the value of the previous column to the current column value 
     // this will be used in the next iteration of this for loop 
     previous = current; 
    } 

    // print a new line to start a new row 
    System.out.println(); 
} 
+0

Спасибо, кажется более эффективным и понятным –

Смежные вопросы