#java #list
#java #Список
Вопрос:
У меня есть класс с именем Utilizador, созданный со следующими атрибутами:
private String nome;
private String email;
private String cidadeAtual;
private List<String> checkins = new ArrayList<String>();
private List<String> amigos = new ArrayList<String>();
В моем основном классе у меня есть список утилит с форматом followinf:
Nickname: Daniel | Email: dd | Cidade atual: Maia | Checkins: [Maia] | Amigos: []
Nickname: Maria | Email: dd2 | Cidade atual: Porto | Checkins: [Porto] | Amigos: []
То, что я пытаюсь сделать, это ввести одно имя, а затем другое и добавить дружбу. Например:
Я набираю Daniel, нажимаю enter. Я набираю Марию, нажимаю ввод. Список друзей теперь должен иметь имена друг друга, подобные этому:
Nickname: Daniel | Email: dd | Cidade atual: Maia | Checkins: [Maia] | Amigos: [Maria]
Nickname: Maria | Email: dd2 | Cidade atual: Porto | Checkins: [Porto] | Amigos: [Daniel]
Но разработанный мной метод помещает оба имени в список Amigos следующим образом:
Nickname: Daniel | Email: dd | Cidade atual: Maia | Checkins: [Maia] | Amigos: [Maria, Daniel]
Nickname: Maria| Email: dd2 | Cidade atual: Porto | Checkins: [Porto] | Amigos: [Maria, Daniel]
Вот метод:
public static void adicionarAmizade() {
Scanner cu = new Scanner(System.in);
System.out.println("Introduza o nome dos utilizadores!");
System.out.println("n1º:");
String amigo1 = cu.next();
System.out.println("n2º:");
String amigo2 = cu.next();
for (Utilizador u : listaUtilizadores) {
if ((u.getNome()).equals(amigo1)) {
u.getAmigos().add(amigo2);
System.out.println("Adicionou");
System.out.println(u.toString());
break;
}
}
for (Utilizador u : listaUtilizadores) {
if ((u.getNome()).equals(amigo2)) {
u.getAmigos().add(amigo1);
System.out.println("Adicionou");
System.out.println(u.toString());
break;
}
}
}
Комментарии:
1. Возможно ли по какой-то причине, что оба
Utilizador
amigos
списка являются одним и тем же экземпляром списка?2. И я знаю, что это означает больше работы с вашей стороны, но в целом: это англоязычный сайт. Таким образом, шансы получить лучшие ответы возрастают, когда ваш исходный код также говорит по-английски. Для меня сейчас контекст отсутствует. Я не понимаю, как ваши два списка, упомянутые выше, и большая часть исходного кода объединяются.
3. Я предлагаю вам узнать о HashMap. docs.oracle.com/javase/8/docs/api/java/util/HashMap.html
Ответ №1:
Что-то вроде этого — это начало.
HashMap<String, String> Amigos = new HashMap<>();
//Create Friendship between Marian and Daniel.
Amigos.put("Maria", "Daniel");
//Get Maria's Friend.
System.out.println(Amigos.get("Maria"))
Комментарии:
1. Этот ответ не является безопасным для типов
2. Спасибо! Вы могли бы отредактировать ответ, чтобы улучшить его.
Ответ №2:
Вы также можете использовать объектный подход.
Объект Person
import java.util.ArrayList;
public class Person {
String name;
ArrayList<String> friends = new ArrayList();
Person(String name)
{
this.name = name;
}
String getName()
{
return this.name;
}
void addFriend(String friendName)
{
friends.add(friendName);
}
boolean isFriend(String friendName)
{
for(String friend : this.friends)
{
if(friend.equals(friendName))
{
return true;
}
}
return false;
}
String getFriendInPosition(int position)
{
return this.friends.get(position);
}
int getFriendPosition(String friendName)
{
int i = 0;
for(String friend : this.friends)
{
if(friend.equals(friendName))
{
return i;
}
i ;
}
return -1;
}
ArrayList<String> getAllFriends()
{
return this.friends;
}
}
Основной класс
public static void main(String[] args) {
Person maria = new Person("Maria");
Person daniel = new Person("Daniel");
maria.addFriend(daniel.getName());
daniel.addFriend("Maria");//You could create this to add Person objects as friends
maria.addFriend("me");//You could create this to add Person objects as friends
maria.addFriend("you");//You could create this to add Person objects as friends
System.out.println(maria.getFriendInPosition(0));
System.out.print("Are Maria and Daniel friends? ");
System.out.println(maria.isFriend(daniel.getName()));
for(String friend : maria.getAllFriends())
{
System.out.println("Maria's friend: " friend);
}
for(String friend : daniel.getAllFriends())
{
System.out.println("Daniel's friend: " friend);
}
}