Массив работает только внутри своего метода... как сделать так чтобы он работал и в других методах?
В идеале было бы хорошо каждый метод сделать отдельно... только я не понимаю как сделать что бы это все было взаимосвязано и можно было каждый раз обращаться к этому массиву, создавать "новый" я не хочу?(
public class Massiv {
public static void main(String[] args) {
int maxNegIndex = 0;
int minPosIndex = 0;
int[] mas = new int[20];
for (int i = 0; i < mas.length; i++) {
mas[i] = (int) ((Math.random() * 21) - 10);
//замена чисел
if (mas[i] < 0) {
if (mas[i] > mas[maxNegIndex])
maxNegIndex = i;
if (mas[maxNegIndex] >= 0)
maxNegIndex = i;
} else if (mas[i] > 0) {
if (mas[i] < mas[minPosIndex])
minPosIndex = i;
if (mas[minPosIndex] <= 0)
minPosIndex = i;
}
// System.out.print(mas[i] + " ");
}
System.out.println(Arrays.toString(mas));
int temp = mas[maxNegIndex];
mas[maxNegIndex] = mas[minPosIndex];
mas[minPosIndex] = temp;
System.out.println(Arrays.toString(mas));
}
static void sum(int[] mas ) {
int sum = 0;
int n = 0;
System.out.println( "Четные элементы:" );
for ( int i = 0; i < mas.length; i++ ) {
if ( mas[i] % 2 == 0 ) {
++n;
sum += mas[i];
System.out.print( " " + mas[i] );
}
}
System.out.println( "Всего четных элементов " + n );
System.out.println( "Их сумма равна " + sum );
}
}
Ответы (1 шт):
Для начала очень рекомендую вам почитать про KISS, SOLID (а лучше еще и GRASP). Первая буква S означает принцип единственной ответственности. Это означает в данном конкретном случае, что каждый метод должен иметь единственное предназначение. Ваш метод sum() выполняет сразу 2 функции - считает количество четных элементов и их сумму (я уже молчу про вывод в консоль). Это будет препятствовать его переиспрользованию в дальнейшем. Принцип KISS говорит "сделай это проще". Посему ваш метод превращается в 2 метогда с четкими обязанностями и максимально простым кодом. Первый метод я не рефакторил, поскольку магии его предназначения мне непонятна, простите)) А ваша проблема решается не разбиением на классы, а, опять таки, корректным разбиением на методы функционала класса (смотрим паттерн GRASP information expert) и отказом от статики. Выглядит это в итоге так:
import java.util.Arrays;
public class Massiv {
private final int[] mas;
public Massiv(int size) {
this.mas = new int[size];
}
public int[] generate() {
int maxNegIndex = 0;
int minPosIndex = 0;
for (int i = 0; i < mas.length; i++) {
mas[i] = (int) ((Math.random() * 21) - 10);
//замена чисел
if (mas[i] < 0) {
if (mas[i] > mas[maxNegIndex]) maxNegIndex = i;
if (mas[maxNegIndex] >= 0) maxNegIndex = i;
} else if (mas[i] > 0) {
if (mas[i] < mas[minPosIndex]) minPosIndex = i;
if (mas[minPosIndex] <= 0) minPosIndex = i;
}
}
int temp = mas[maxNegIndex];
mas[maxNegIndex] = mas[minPosIndex];
mas[minPosIndex] = temp;
return mas;
}
public int sumEvenElements() {
return Arrays.stream(mas).filter(i->i % 2 == 0).sum();
}
public int[] evenElements() {
return Arrays.stream(mas).filter(i->i % 2 == 0).toArray();
}
public static void main(String[] args) {
Massiv massiv = new Massiv(20);
System.out.println(Arrays.toString(massiv.generate()));
int[] evenElements = massiv.evenElements();
System.out.println("Четные элементы: " + Arrays.toString(evenElements));
System.out.println("Всего четных элементов: " + evenElements.length);
System.out.println("Их сумма равна: " + massiv.sumEvenElements());
}
}