Сортировка людей по короче - PullRequest
0 голосов
/ 03 октября 2019

Итак, у меня есть класс Person, который содержит имя человека (строку) и имя человека, который является предыдущим человеком в строке. Мы уже знаем, что «Петр» первый в ряду, у него нет предыдущего человека. Я хочу дать им номер, который отображает порядок.

class Person{

    private String name;
    private int number;
    private String previousName;
    //getters and setters... 
} 
public class Main {
    private static Person[] persons; //filled up with names...
      for(int i=0; i<persons.length; i++){
            for(int j=0; j<persons.length; j++){
                if(persons[i].getName().equals(persons[j].getPreviousName())){
                    persons[j].setNumber(persons[i].getNumber()+1);
                    break;
                }

            }
          }
}

ввод:

format: name ; previous person's name:
Peter (first in the row)//
Dave;Joseph//
Samuel;Steve//
Joseph;Peter//
Steve;Dave

результат должен быть:

Peter - 1
Joseph - 2
Dave - 3
Steve - 4
Samuel - 5

мой результат:

Peter 1
Dave 3
Samuel 2
Joseph 2
Steve 1

1 Ответ

0 голосов
/ 03 октября 2019

Я не проверял, но это должно работать. Основная идея - найти первого человека в списке. А затем переберите список, чтобы найти следующего человека, имеющего предыдущее имя в качестве текущего имени. Определенно не очень оптимизированное решение, но его можно улучшить!

//Find the first person in list, assuming first person has no previous name
int currentPerson = 0;
for (int i=0; i<persons.length; i++){
    if (persons[i].getPreviousName().equals("")){
        currentPerson = i;
        break;
    }
}
persons[currentPerson].setNumber(1);
int count = 1;

//loop until you number every person
while (count < persons.length){
    //find the next person after current person
    for (int i=0; i<persons.length; i++){
        if (persons[i].getPreviousName().equals(persons[currentPerson].getName())){
            persons[currentPerson].setNumber(count++);
            currentPerson = i;
            break;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...