Подсчет чисел в массиве, функция
Помогите сделать подсчет чисел в методе. Что то не соображаю уже. Вообщем надо чтобы вывел сумму обоих матриц,в отдельном методе.Еще один вопрос,а как сделать чтобы матрица с наибольшей суммой выводился последним? Заранее спасибо. Java
import java.util.stream.IntStream;
public class Main {
public static void main ( String[] args ) {
int[][] a = new int[4][4];
a = Matrix (a);
}
static int[][] Matrix ( int[][] a ) {
for (int i = 0; i < a.length; i++) {
System.out.println ();
for (int j = 0; j < a.length; j++) {
a[i][j] = (int) ( Math.random () * ( 100 ) );
System.out.print (a[i][j] + " ");
}
}
System.out.println ("");
for (int k = 0; k < a.length; k++) {
System.out.println ();
for (int l = 0; l < a.length; l++) {
a[k][l] = (int) ( Math.random () * ( 100 ) );
System.out.print (a[k][l] + " ");
}
}
**return a;
int sum = 0;
int sum = IntStream.of(a).sum();
System.out.println("The sum is " + sum);
}**
}
РЕДАКТИРОВАНО
import java.util.stream.IntStream;
public class Mainnn {
public static void main(String[] args) {
int[][] array1 = createArray (new int[4][4]);
int[][] array2 = createArray (new int[4][4]);
int[][] array3 = createArray (new int[4][4]);
int arraySum1 = arraySum(array1);
int arraySum2 = arraySum(array2);
int arraySum3 = arraySum(array3);
writeArray (array1);
System.out.println("Сумма этого массива --> " + arraySum1);
System.out.println("");
writeArray (array2);
System.out.println("Сумма этого массива --> " + arraySum2);
System.out.println("");
writeArray (array3);
System.out.println("Сумма этого массива --> " + arraySum3);
System.out.println("");
System.out.println("............................................................");
if (arraySum1>arraySum2 | arraySum1>arraySum3) {
writeArray (array1);
System.out.println(arraySum1);
System.out.println("");
System.out.println("Это наибольшая по числовому значению матрица, и она равна --> " + arraySum1);
}
else if(arraySum2>arraySum1 | arraySum2>arraySum3) {
writeArray (array2);
System.out.println (arraySum2);
System.out.println("");
System.out.println ("Это наибольшая по числовому значению матрица, и она равна --> " + arraySum2);
}
else if(arraySum3>arraySum1 | arraySum3>arraySum2) {
writeArray (array3);
System.out.println (arraySum3);
System.out.println("");
System.out.println ("Это наибольшая по числовому значению матрица, и она равна--> " + arraySum3);
}
}
private static int[][] createArray ( int[][] array) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
array[i][j] = (int) (Math.random() * (100));
}
}
return array;
}
private static int[][] writeArray ( int[][] array) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.println();
}
return array;
}
private static int arraySum(int[][] array) {
return IntStream.range(0, array.length)
.map(i -> IntStream.range(0, array[i].length).map(n -> array[i][n]).sum())
.sum();
}
}
Ответы (1 шт):
Автор решения: Дмитрий
→ Ссылка
Стрим не умеет работать с многомерным массивом, поэтому надо это реализовывать самостоятельно.
К примеру, можно так :
import java.util.Map;
import java.util.TreeMap;
import java.util.stream.IntStream;
public class Main {
public static void main(String[] args) {
generateArray(3).forEach((k, v) -> {
printArray(v);
System.out.println(k);
});
}
private static Map<Integer, Integer[][]> generateArray(int numb) {
final Map<Integer, Integer[][]> arrayMap = new TreeMap<>();
for (int i = 0; i < numb; i++) {
Integer[][] array = generateArray(new Integer[4][4]);
Integer arraySum = arraySum(array);
arrayMap.put(arraySum, array);
}
return arrayMap;
}
private static Integer[][] generateArray(Integer[][] array) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
array[i][j] = (int) (Math.random() * (100));
}
}
return array;
}
private static Integer[][] printArray(Integer[][] array) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
System.out.print(array[i][j] + "; ");
}
System.out.println();
}
return array;
}
private static Integer arraySum(Integer[][] array) {
return IntStream.range(0, array.length)
.map(i -> IntStream.range(0, array[i].length).map(n -> array[i][n]).sum())
.sum();
}
}