Как записать результат умножения данных из трех массивов размеров в один массив объемов?
Задание из книги ООП в языке Java. Сборник заданий и тематических примеров:
- Инициализировать массивы
a,b,cизnчисел случайными значениями. - Понимая, что
a[i],b[i],c[i]обозначают длины ребер кирпичей, определить кирпич с максимальным объемом.
import java.util.Arrays;
import java.util.*;
public class Kirpich {
static int[] generationArr(final int MAX, final int MIN, int n) {
int[] array = new int[n];
for (int i = 0; i < array.length; i++) {
array[i] = (int) (Math.random() * (MAX - MIN) + MAX);
}
return array;
}
static int[] volume(int[] a, int[] b, int[] c, int n) {
int[] arrs = new int[n];
for( int i = 0; i<a.length; i++) {
//int a1 = a[i];
//int b1 = b[i];
//int c1 = c[i];
for(int j = 0; j < arrs.length; j++) {
arrs = (a[i]*b[i]*c[i]);
}
}
return arrs;
}
}
Как записать результат умножения в массив, чтобы потом найти индекс максимального?
Ответы (1 шт):
Похоже, что в методе volume вы пытаетесь создать массив со значениями объёмов кирпичей, но в данном случае вложенный цикл не нужен, достаточно одного цикла.
static int[] volume(int[] a, int[] b, int[] c, int n) {
int[] v = new int[n];
for (int i = 0; i < v.length; i++) {
int ai = i < a.length ? a[i] : 0;
int bi = i < b.length ? b[i] : 0;
int ci = i < c.length ? c[i] : 0;
v[i] = ai * bi * ci;
}
return v;
}
Вложенный цикл можно было бы использовать, если бы вычислялись объёмы M кирпичей для некоторого количества размеров.
Благодаря использованию vararg-синтаксиса ..., можно вычислять объёмы N-мерных кирпичей :)
static int[] volumes(int m, int[] ... sizes) {
int[] v = new int[m]; // количество кирпичей
for (int i = 0; i < m; i++) {
int vi = 1;
for (int j = 0; j < sizes.length; j++) {
vi *= sizes[j][i];
}
v[i] = vi;
}
return v;
}
В принципе, в задании не указано, что обязательно требуется создавать массив с объёмами кирпичей, поэтому, как верно указал @MBo в комментарии, достаточно найти индекс максимального объёма:
static int indexOfMaxVolume(int[] a, int[] b, int[] c, int n) {
if (n <= 0 || a.length < 1 || b.length < 1 || c.length < 1) {
return -1;
}
int maxIndex = 0;
int m = Math.min(Math.min(n, a.length), Math.min(b.length, c.length));
for (int i = 1; i < m; i++) {
if (a[i] * b[i] * c[i] > a[maxIndex] * b[maxIndex] * c[maxIndex]) {
maxIndex = i;
}
}
return maxIndex;
}