Коллеги, добрый вечер!
Посмотрите, пожалуйста, что я делаю не так. Не идёт задача, увы: "Метод getAllFriendsAndPotentialFriends должен быть реализован согласно условию." - где-то не дочитал условие, видимо.
package com.javarush.task.task36.task3611;
import java.net.Inet4Address;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
/*
Сколько у человека потенциальных друзей?
*/
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> set = new TreeSet<>();
for (int i = 0; i < humansRelationships[index].length; i++) {
//заносим в сет всех друзей
if (humansRelationships[index][i]) {
set.add(i);
}
}
//теперь в листе содержатся все друзья для index и нужно проверить их друзей (поддрузей), в завирсимости от глубины
//deep = 0 - не проверяем;
//deep = 1 - проверяем 1 круг друзей;
//deep = 2 - проверяем 2 круг друзей и т.д.
//создаёс копию set чтобы избежать ConcurrentModificationException
Set<Integer> tmpSet = new TreeSet<>();
tmpSet.addAll(set);
while (deep > 1) {
//перебираю все элементы сета (друзья первого уровня)
for (int tmp : tmpSet) {
for (int i = tmp; i < humansRelationships.length; i++) {
if(humansRelationships[i][tmp]){
set.add(i);
}
}
}
deep--;
}
//удаляем число index из списка
set.remove(Integer.valueOf(index));
return set;
//напишите тут ваш код
}
//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;
}
//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
};
}
}