Есть обобщенный метод в котором параметр принимает двумерный массив.
Вопрос, как найти сумму?
Код моих попыток ниже:
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
}
Можно сделать перегрузку. Это единственное верное решение вашей задачи! Так как 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));
Integer summ - объявляет переменную, но не задаёт ей значение. Чему равно summ + 5 ? Никто не знает, т.к. для summ не было задано начальное значение. Возможно в Java по умолчанию, это ноль, но лучше написать самому.
Двумерный массив - это массив массивов.
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
}
Дело в том что во втором цикле вы проверяете размер 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;
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Нужно устанвить salt для ShaPasswordEncoder, но не очень понятен принцип взаимодействия с классом MessageDigestPasswordEncoder
Как реализовать При нажатии на GridView подсветить ее и изьять информацию?
Работаю с библиотекой JavaFX, и вот не понимаю вообще,как мне к GUI подключить БД, или лучше сделать коллекции значений,чтобы они были в роли бд?