Как найти сумму двумерного массива?

248
01 мая 2018, 02:49

Есть обобщенный метод в котором параметр принимает двумерный массив.
Вопрос, как найти сумму?
Код моих попыток ниже:

  static <T extends Number> T function (T array[][]){
        Integer summ;
        for(int i = 0; i < array.length; i++){
            for(int j = 0; j < array.length; j++){
                summ = summ + array[i][j]; // error
            }
        }
        return summ; // error
    }
Answer 1

Можно сделать перегрузку. Это единственное верное решение вашей задачи! Так как summ может быть и Float, и Double, и Integer. То есть мы не можем явно проинициализировать значение этой переменной

   static Long function(Long array[][]) {
        Long summ = 0L;
        for (Long[] anArray : array) {
            summ += Stream
                    .of(anArray)
                    .mapToLong(s -> s)
                    .sum();
        }
        return summ;
    }
    static Double function(Double array[][]) {
        Double summ = 0.0;
        for (Double[] anArray : array) {
            summ += Stream
                    .of(anArray)
                    .mapToDouble(s -> s)
                    .sum();
        }
        return summ;
    }
    static Integer function(Integer array[][]) {
        Integer summ = 0;
        for (Integer[] anArray : array) {
            summ += Stream
                    .of(anArray)
                    .mapToInt(s -> s)
                    .sum();
        }
        return summ;
    }

Пример:

Integer[][] s = new Integer[][]{
        {1, 4, 5}, {2, 2, 9}
};
System.out.println(function(s));

 Double[][] s = new Double[][]{
                {1.4, 4.8, 5.9}, {2.4, 2.9, 9.3}
        };
 System.out.println(function(s));

Answer 2
  1. Integer summ - объявляет переменную, но не задаёт ей значение. Чему равно summ + 5 ? Никто не знает, т.к. для summ не было задано начальное значение. Возможно в Java по умолчанию, это ноль, но лучше написать самому.

  2. Двумерный массив - это массив массивов.

    Integer arr1[] - arr1[0] - это число, равное 1 arr1: [1,2,3,4]

    Integer arr2[][] - arr2[0] - это массив, который состоит из чисел [1,2,3,4]. arr2: [[1,2,3,4],[5,6,7,8]].

Таким образом в коде две ошибки: не проиницилизорованно начальное значение summ и во-втором цикле используется arr.length, тогда, как нам нужна длина вложенного массива arr[i].length.

static <T extends Number> T function (T array[][]){
        T summ = 0;
        for(int i = 0; i < array.length; i++){
            for(int j = 0; j < array[i].length; j++){
                summ = summ + array[i][j]; // error
            }
        }
        return summ; // error
    }
Answer 3

Дело в том что во втором цикле вы проверяете размер 1 измерения массива (array.length) так как в [i] тоже массивы, стоит сделать так. Еще summ не инициализирована. Так-же бы я рекомендовал summ сделать типа T

static <T extends Number> T function (T array[][]){
        T summ = 0;
        for(int i = 0; i < array.length; i++){
            for(int j = 0; j < array[i].length; j++){
                summ = summ + array[i][j]; 
            }
        }
        return summ; 
}
READ ALSO
Как установить salt для ShaPasswordEncoder?

Как установить salt для ShaPasswordEncoder?

Нужно устанвить salt для ShaPasswordEncoder, но не очень понятен принцип взаимодействия с классом MessageDigestPasswordEncoder

239
Выделить ячейки в GridView

Выделить ячейки в GridView

Как реализовать При нажатии на GridView подсветить ее и изьять информацию?

187
Подключение GUI к БД

Подключение GUI к БД

Работаю с библиотекой JavaFX, и вот не понимаю вообще,как мне к GUI подключить БД, или лучше сделать коллекции значений,чтобы они были в роли бд?

202