Try думать немного больше с точки зрения объектно-ориентированного программирования (объектно-ориентированное программирование).
A Participant
может участвовать в нескольких Event
. Каждый раз, когда Participant
участвует в Event
, есть Result
, который генерируется для данного Participant
и получает соответствующий балл.
Теперь, когда у меня есть основная структура того, как я хочу разбить мои классы, мы можем определить конкретное поведение того, как мы хотим, чтобы каждый класс работал.
public class Participant
{
private List<Event> events;
private String name;
public Participant(String name)
{
this.name = name;
events = new ArrayList<Event>();
}
//... other methods
public void participate(Event event)
{
double score;
//... get the score
events.add(event);
event.recordResult(this, score);
}
}
Так что теперь Participant
может участвовать в некоторых Event
-х, которые вы определили.
Теперь, глядя на то, что я сделал в этом методе участия, нам нужно иметь способ хранить Result
внутри Event
.
public class Event
{
private List<Result> results;
public Event()
{
results = new ArrayList<Result>();
}
// ...
public void scoreResult(Participant participant, double score)
{
//if a participant cannot participate multiple times in an event, probably need a check to see if
//the participant is already in the list, otherwise update the score isntead of adding a new Result
results.add(new Result(participant, score));
}
}
Так что теперь каждый Event
, что вы определяете есть способ забить Result
для конкретного Participant
.
Я просто сделать основной контур для Result
класса
public class Result
{
private Participant participant;
private double score;
public Result(Participant participant, double score)
{
this.participant = participant;
this.score = score;
}
// ... getters and setters
}
Это может быть основной контур для ваших объектов. Теперь вы можете определить метод в Participant
, чтобы получить лучший Result
всех Event
-х он участвовал в что-то вроде:.
public Result getBestResult()
{
Result bestResult = null;
for(Event event : events)
{
if(bestResult == null)
bestResult = event.getResult();
if(bestResult.getScore() < event.getResult().getScore())
bestResult = event.getResult();
}
//if the participant hasn't participated in any event, then this will return a null result.
return bestResult;
}
Я надеюсь, что это имеет смысл, и поможет вам думать о вещах, в более ОО путь. Таким образом, вы можете определить другие методы для Event
, например, как получить Participant
с самым высоким Result
.
Конечно, это всего лишь один способ разметки классов, и я настоятельно рекомендую вам заранее подумать, как вы хотите, чтобы ваши объекты взаимодействовали друг с другом перед кодированием. Подумайте об отношениях между объектами.Я знаю, что вы всего лишь новичок, поэтому это может быть немного продвинутым, но если вы серьезно относитесь к тому, как научиться правильно кодировать, это определенно нужно изучить.
Изменить метод подписи к 'Result' вместо двойной, а затем вернуть побеждающий объект. Чтобы сохранить этот объект, вы можете создать экземпляр объекта в вашем методе. –
Java 8: 'return Collections.max (eventResults, Comparator.comparingDouble (Результат: getResult));' – 4castle
4castle Вы могли бы написать это как ответ, если бы вы были готовы предоставить объяснение. –