Вывод верный, но не проходит по последниму пункту : Метод getAllFriendsAndPotentialFriends должен быть реализован согласно условию
package com.javarush.task.task36.task3611;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/*
Сколько у человека потенциальных друзей?
*/
public class Solution {
private boolean[][] humansRelationships;
public static void main(String[] args) {
Solution solution = new Solution();
solution.humansRelationships = generateRelationships();
Set<Integer> allFriendsAndPotentialFriends = solution.getAllFriendsAndPotentialFriends(4, 2);
System.out.println(allFriendsAndPotentialFriends); //expected: [0, 1, 2, 3, 5, 7]
Set<Integer> potentialFriends = solution.removeFriendsFromSet(allFriendsAndPotentialFriends, 4);
System.out.println(potentialFriends); //expected: [2, 5, 7]
}
public Set<Integer> getAllFriendsAndPotentialFriends(int index, int deep) {
Set<Integer> resultSet = new HashSet<>();
if (deep == 0) return resultSet;
ArrayList<Integer> indexOfFriendsFinal = new ArrayList<>();
boolean[][] arrOfFriends = generateRelationships();
int count = 0;
indexOfFriendsFinal = searchFriends(index, arrOfFriends);
ArrayList<Integer> intermediate;
ArrayList<Integer> tempList = new ArrayList<>();
tempList.addAll(indexOfFriendsFinal);
while (count < deep - 1) {
for (int i = 0; i < tempList.size(); i++) {
intermediate = searchFriends(indexOfFriendsFinal.get(i), arrOfFriends);
for (Integer elem : intermediate) {
if (!indexOfFriendsFinal.contains(elem) && elem != index) {
indexOfFriendsFinal.add(elem);
}
}
}
count++;
Iterator iterator = tempList.iterator();
while (iterator.hasNext()) {
Object element = iterator.next();
iterator.remove();
}
tempList.addAll(indexOfFriendsFinal);
}
for (Integer elem : indexOfFriendsFinal) {
resultSet.add(elem);
}
return resultSet;
}
//remove people from set, with which you have already had relationship
public Set<Integer> removeFriendsFromSet(Set<Integer> set, int index) {
for (int i = 0; i < humansRelationships.length; i++) {
if ((i < index) && (index < humansRelationships.length) && humansRelationships[index][i]) {
set.remove(i);
} else if ((i > index) && humansRelationships[i][index]) {
set.remove(i);
}
}
return set;
}
public ArrayList<Integer> searchFriends(int index, boolean[][] arrOfFriends) {
ArrayList<Integer> listOfFriends = new ArrayList<>();
int i = index;
for (int j = 0; j < i; j++) {
if (arrOfFriends[i][j]) {
listOfFriends.add(j);
}
}
int j = index;
for (i = i + 1; i < arrOfFriends.length; i++) {
if (arrOfFriends[i][j]) {
listOfFriends.add(i);
}
}
return listOfFriends;
}
//return test data
private static boolean[][] generateRelationships() {
return new boolean[][]{
{true}, //0
{true, true}, //1
{false, true, true}, //2
{false, false, false, true}, //3
{true, true, false, true, true}, //4
{true, false, true, false, false, true}, //5
{false, false, false, false, false, true, true}, //6
{false, false, false, true, false, false, false, true} //7
};
}
}package com.javarush.task.task36.task3611;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
/*
Сколько у человека потенциальных друзей?
*/
public class Solution {
private boolean[][] humansRelationships;
public static void main(String[] args) {
Solution solution = new Solution();
solution.humansRelationships = generateRelationships();
Set<Integer> allFriendsAndPotentialFriends = solution.getAllFriendsAndPotentialFriends(4, 2);
System.out.println(allFriendsAndPotentialFriends); //expected: [0, 1, 2, 3, 5, 7]
Set<Integer> potentialFriends = solution.removeFriendsFromSet(allFriendsAndPotentialFriends, 4);
System.out.println(potentialFriends); //expected: [2, 5, 7]
}
public Set<Integer> getAllFriendsAndPotentialFriends(int index, int deep) {
Set<Integer> resultSet = new HashSet<>();
if (deep == 0) return resultSet;
ArrayList<Integer> indexOfFriendsFinal = new ArrayList<>();
boolean[][] arrOfFriends = generateRelationships();
int count = 0;
indexOfFriendsFinal = searchFriends(index, arrOfFriends);
ArrayList<Integer> intermediate;
ArrayList<Integer> someList = new ArrayList<>();
someList.addAll(indexOfFriendsFinal);
while (count < deep - 2) {
for (int i = 0; i < someList.size(); i++) {
intermediate = searchFriends(indexOfFriendsFinal.get(i), arrOfFriends);
for (Integer elem : intermediate) {
if (!indexOfFriendsFinal.contains(elem) && elem != index) {
indexOfFriendsFinal.add(elem);
}
}
}
count++;
Iterator iterator = someList.iterator();
while (iterator.hasNext()) {
Object element = iterator.next();
iterator.remove();
}
someList.addAll(indexOfFriendsFinal);
}
for (Integer elem : indexOfFriendsFinal) {
resultSet.add(elem);
}
return resultSet;
}
//remove people from set, with which you have already had relationship
public Set<Integer> removeFriendsFromSet(Set<Integer> set, int index) {
for (int i = 0; i < humansRelationships.length; i++) {
if ((i < index) && (index < humansRelationships.length) && humansRelationships[index][i]) {
set.remove(i);
} else if ((i > index) && humansRelationships[i][index]) {
set.remove(i);
}
}
return set;
}
public ArrayList<Integer> searchFriends(int index, boolean[][] arrOfFriends) {
ArrayList<Integer> listOfFriends = new ArrayList<>();
int i = index;
for (int j = 0; j < i; j++) {
if (arrOfFriends[i][j]) {
listOfFriends.add(j);
}
}
int j = index;
for (i = i + 1; i < arrOfFriends.length; i++) {
if (arrOfFriends[i][j]) {
listOfFriends.add(i);
}
}
return listOfFriends;
}
//return test data
private static boolean[][] generateRelationships() {
return new boolean[][]{
{true}, //0
{true, true}, //1
{false, true, true}, //2
{false, false, false, true}, //3
{true, true, false, true, true}, //4
{true, false, true, false, false, true}, //5
{false, false, false, false, false, true, true}, //6
{false, false, false, true, false, false, false, true} //7
};
}
}