Привет всем, Я хотел бы попросить вас помочь разобраться в логике этой программы, особенно в некоторых частях, в которых я, вероятно, сложен.
1.Metod ranking()
.Он не принимает какой-либо параметр, но возвращает результат из параметров "выиграл" и "связан".ХОРОШО.Но когда мы называем этот метод следующим образом
System.out.println(adelaideCrows.getName()+": result:
"+**adelaideCrows.ranking()**);
, как программа знает значения "выиграно" и "связано" для этой команды adealideCrows?Я знаю, что ООП - это передача объектов соответствующим ссылкам на объекты.Так работает ли он так, что когда мы сначала вызываем метод adelaideCrows.matchResult(ohioFotlball, 1,0);
, тогда adelaideCrows является ссылкой на метод matchResult, передавая параметры в скобках, а затем они сохраняются в памяти под ссылкой на adelaideCrows?поэтому, когда мы в следующий раз вызовем тот же метод с другой ссылкой melbournSoccer.matchResult(newyorkSoccer,6,4);
, тогда параметры "won" и "tied" будут иметь свои собственные значения, переданные в скобках под ссылкой melbournSoccer?Таким образом, после вызова метода rank () со ссылкой, например, программа adelaideCrows узнает, что по этой ссылке уже сохранены значения параметров "выиграно" и "связано", и метод затем возвращает правильные значения.Правильно?
2. И здесь System.out.println(melbournSoccer.compareTo(newyorkSoccer));
Логика та же самая?ссылка melbournSoccer связана в методе public int compareTo(Team<T> team)
с this.ranking()
, но ссылка newyorkSoccer связана с team.ranking()
?Таким образом, вызов this.ranking()
вызывает значения, хранящиеся в памяти эталонного melbournSoccer и т. Д.
Спасибо, МНОГО.
Вот код для основного класса:
public class Main
{
public static void main(String[] args) {
SoccerPlayer soccerPlayer = new SoccerPlayer("joe");
BaseballPlayer baseballPlayer = new BaseballPlayer("pat");
FootballPlayer footballPlayer = new FootballPlayer("backham");
Team<FootballPlayer> adelaideCrows = new Team<>("Adelaide Crows
footbal");
Team<SoccerPlayer> melbournSoccer = new Team<>("Melbourn soccer");
Team<BaseballPlayer> jerseeBaseball = new Team<>("Jersee
Baseball");
melbournSoccer.addPlayer(soccerPlayer);
jerseeBaseball.addPlayer(baseballPlayer);
adelaideCrows.matchResult(ohioFotlball, 1,0);
melbournSoccer.matchResult(newyorkSoccer,6,4);
System.out.println("Ranking...");
System.out.println(adelaideCrows.getName()+": result:
"+adelaideCrows.ranking());
System.out.println(melbournSoccer.getName()+": result:
"+melbournSoccer.ranking());
System.out.println(jerseeBaseball.getName()+": result:
"+jerseeBaseball.ranking());
System.out.println(melbournSoccer.compareTo(newyorkSoccer));
System.out.println(adelaideCrows.compareTo(ohioFotlball));
Класс игрока, от которого наследуются еще три класса FotballPlayer, SoccerrPlayer и BaseballPlayer.
public abstract class Player{
private String name;
public Player(String name){
this.name = name;
}
public String getName(){
return name;
}
}
А вот и командный класс.
import java.util.ArrayList;
public class Team<T extends Player> implements Comparable<Team<T>>{
private String name;
int played = 0;
int lost = 0;
int won = 0;
int tied = 0;
private ArrayList<T> members = new ArrayList<>();
public Team(String name){
this.name = name;
}
public String getName(){
return name;
}
public boolean addPlayer(T player){
if(members.contains(player)){
System.out.println(player.getName()+" is already on this
team.");
return false;
}else{
members.add(player);
System.out.println(player.getName()+" has been added to team
"+this.name);
return true;
}
}
public int numPlayers(){
return this.members.size();
}
public void matchResult(Team<T> oponent, int ourScore, int theirScore){
if(ourScore > theirScore){
won++;
}else if(ourScore == theirScore){
tied++;
}else{
lost++;
}
played++;
if(oponent != null){
oponent.matchResult(null, theirScore, ourScore);
}
}
public int ranking(){
return (won * 2) + tied;
}
@Override
public int compareTo(Team<T> team){
if(this.ranking() > team.ranking()){
return -1;
} else if(this.ranking() < team.ranking()){
return 1;
}
else{
return 0;
}
}
}