Проверка рандомно сгенерированных элементов в массиве на совершенные - Java
У меня есть класс TablicaLiczb в котором есть несколько метод,
с помощью метода do_tablicy я заполняю массив рандомными элементами, а с
помощью метода wypisz я выписываю созданный массив в консоль.
Метод doskonala проверяет переданное число в параметре на совершенное число
Можно ли как то на место параметра передавать, выше созданный мною массив
и каждое число в нем проверить на совершенное? Когда я это делаю в цикле то мне будет выводится
каждое число, и говорить совершенное оно или нет, но я хотел бы что бы вывело только совершенные,
а если их нету, то просто один раз вывести в консоль текст - что их нету, буду раз за помощь.
Вот мой код:
public class Main {
public static void main(String[] args) {
TablicaLiczb tablicaLiczb = new TablicaLiczb(5);
tablicaLiczb.do_tablicy();
tablicaLiczb.wypisz();
tablicaLiczb.doskonala(6);
}
}
public class TablicaLiczb {
private int liczbaElementow;
private int[] tablica;
private int max = 0;
private int min = 0;
public TablicaLiczb(int liczbaElementow) {
this.liczbaElementow = liczbaElementow;
tablica = new int[liczbaElementow];
}
public int random(int max, int min) {
this.max = max;
this.min = min;
max -= min;
return (int) (Math.random() * ++max) + min;
}
public void do_tablicy() {
for (int i = 0; i < tablica.length; i++)
tablica[i] = random(1, 1000);
}
public void wypisz() {
for (int i = 0; i < tablica.length; i++)
System.out.print(tablica[i] + "\t");
}
public void doskonala(int doskonala) {
int sum = 0;
for (int i = 1; i < doskonala; i++) {
if (doskonala % i == 0)
sum = sum + i;
}
if (sum == doskonala)
System.out.print("\nLiczba " + doskonala + " jest doskonala\n");
else
System.out.print("\nLiczba " + doskonala + " nie jest doskonala\n");
}
}
Ответы (1 шт):
Сделайте, чтоб функция doskonala отвечала только за проверку, и не печатала сама ничего.
public boolean doskonala(int doskonala) {
int sum = 0;
for (int i = 1; i < doskonala; i++) {
if (doskonala % i == 0)
sum = sum + i;
}
return sum == doskonala;
}
Теперь ее можно использовать в других:
public List<Integer> getAllPerfect() {
List<Integer> result = new ArrayList<>();
for (int i = 0; i < tablica.length; i++) {
if (doskonala(tablica[i])) {
result.add(tablica[i]));
}
}
return result;
}
public void printAllPerfect() {
List<Integer> allPerfect = getAllPerfect();
if (allPerfect.isEmpty()) {
System.out.println("No perfect");
} else {
for(Integer perfect: allPerfect) {
System.out.println(String.format('Perfect: %d', perfect));
}
}
}