2013-05-16 2 views
0

Я пытаюсь сделать самый большой продукт среди четырех смежных номеров (целые числа) в сетке 20x20.Расчет многомерных массивов

Это то, что я до сих пор ...

/** 
* The maxProduct method is used to compute the largest product across four 
* consecutive integers (either horizontally, vertically, or diagonally). 
* 
* @param gridData - A 20x20 array containing the integer values. 
* @return maxProduct - The largest product. 
*/ 
private static int maxProduct(int[][] gridData) 
{ 
    int maxProduct = 0; 
    int currentProduct = 0; 

    // Compute the products across the columns. 
    for (int row = 0; row < 20; row++) 
     for (int column = 0; column < 17; column++) 
     { 
      currentProduct = gridData[row][column] 
        * gridData[row][column + 1] * gridData[row][column + 2] 
        * gridData[row][column + 3]; 

      if (currentProduct > maxProduct) 
      { 
       maxProduct = currentProduct; 
      } 

     } 

    // Compute the products across the rows. 
    for (int column = 0; column < 20; column++) 
     for (int row = 0; row < 17; row++) 
     { 
      currentProduct = gridData[row][column] 
        * gridData[row + 1][column] * gridData[row + 2][column] 
        * gridData[row + 3][column]; 

      if (currentProduct > maxProduct) 
      { 
       maxProduct = currentProduct; 
      } 
     } 

    // Compute the products across the right diagonals. 
    for (int column = 0; column < 17; column++) 
     for (int row = 0; row < 17; row++) 
     { 
      currentProduct = gridData[row][column] 
        * gridData[row + 1][column + 1] 
        * gridData[row + 2][column + 2] 
        * gridData[row + 3][column + 3]; 

      if (currentProduct > maxProduct) 
      { 
       maxProduct = currentProduct; 
      } 

     } 


    // Compute the products across the left diagonals. 
    for (int column = 19; column < 3; column--) 
     for (int row = 0; row < 17; row++) 
     { 
      currentProduct = gridData[row][column] 
        * gridData[row + 1][column - 1] 
        * gridData[row + 2][column - 2] 
        * gridData[row + 3][column - 3]; 

      if (currentProduct > maxProduct) 
      { 
       maxProduct = currentProduct; 
      } 
     } 

    return maxProduct; 
} 

Я скопировал этот код через другого одного из моих проектов (это случилось, игра Connect 4, который использовал 8x8 сетку). Очевидно, мой код для игры Connect 4 не работал. Мои левые диагонали не прошли тестовые тесты, и я уверен, что исправил проблему в этом методе.

Функциональность должна быть идентичной (для вычисления продуктов), но я не нахожу правильное значение.

Где моя логика не так?

ответ

3

Проблема, которую я вижу с этой линией:

for (int column = 19; column < 3; column--) 

Это будет false, чтобы начать и блок никогда не выполняется. Вы, вероятно, нужно

for (int column = 19; column >= 3; column--) 

Используйте >= так, что последнее действительное значение column является 3 (и так column - 3 вычисляет 0 и вы достигнете с левой стороны).

2

Этот цикл кажется неправильным: column = 19; column < 3; column-- вы никогда не выполните ни одну итерацию. Может, ты имел в виду column > 3?

+0

Хех, простая ошибка. Это исправило это. Спасибо, что поймал это для меня! – Jonathan

+0

Вы должны использовать 'column> = 3', чтобы вы также проверяли регистр для столбцов 0-3. Если вы используете 'column> 3', то последний случай будет проверять столбцы 1-4. – rgettman

+0

Я включил это исправление, я просто забыл условный дангит. Спасибо, парни! – Jonathan

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