Взятие набора данных и печать его в 2D массиве

Для этих сценариев я хотел бы использовать небольшой помощник, подобный этому:

/**
 * Accesses nested properties and returns a default value if it encounters null or undefined along the way.
 * @param fallback A fallback value if any property or its value is null or undefined.
 * @param path The path to access a nested property
 */
export const propOrDefault = (fallback: R) => (...path: string[]) => (obj: T | null | undefined): R =>
  path.reduce((partialObj, propertyName) => {
    if (partialObj && propertyName && partialObj.hasOwnProperty(propertyName)) {
      return partialObj[propertyName] || fallback;
    }

    return fallback;
  }, obj);

Это TypeScript, но он должен получить точку. Дополнительная информация о типе может помочь с пониманием.

Пример использования:

const isValid = propOrDefault(0)('staff', 'members', 'length')(state) < 5;

Как вы можете видеть, этот помощник использует currying , чтобы вы могли предварительно -конфигурируйте его для последующего использования следующим образом:

const propOrTen = propOrDefault(0);
const countStaffMembers = propOrTen('staff', 'members', 'length');
const result = countStaffMembers(state);

Там есть множество библиотек с подобными инструментами, такими как lodash и ramda .

1
задан Jordan 19 January 2019 в 06:09
поделиться

1 ответ

Вы получаете NullPointerException, потому что sales это null в строке for (row = 0; row < sales.length; row++).

Даже если вы установите значение переменной sales в конструкторе Sales(), вы никогда не вызовете этот конструктор (как new Sales()).

Итак, чтобы исправить это NullPointerException, вы можете вызвать конструктор Sales в методе main() следующим образом:

public static void main(String[] args)
{
  new Sales();

  calCityTotal();
  calMonthlyTotal();
  displayTable();
}

РЕДАКТИРОВАТЬ
После исправления NullPointerException в вашем коде осталось еще несколько проблем.

Внутри calCityTotal(), sales[0].length следует исправить как sales[row].length, я думаю.

citySum массив инициализируется до длины sales. Это означает, что citySum.length равно количеству «строк». Но затем вы пишете citySum[col], что может привести к ArrayIndexOutOfBoundsException, потому что число «столбцов» может превышать citySum.length. (Это действительно происходит в вашей программе. Потому что число строк = 5 и количество столбцов = 6.)

0
ответ дан Prasad Karunagoda 19 January 2019 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: