Dúvidas - Temporada F1 - Java - Portugal-a-Programar
Dúvidas - Temporada F1
By N7_, May 23, 2011 in Java
N7_ 0
Estou a desenvolver um programa para gerir uma temporada de F1, na qual existem vários pilotos, cada piloto pertence a uma equipa, uma temporada tem várias corridas, etc etc..
As minhas maiores dúvidas prendem-se com os seguintes requesitos:
->Numa corrida participam até 24 pilotos, cada um pertencente a uma equipa. A equipa pode ter até dois pilotos oficiais e um conjunto de pilotos de teste embora caso necessário um piloto de testes pode substituir um piloto oficial numa corrida.
->A aplicação precisa de listar todos os pilotos na grelha de partida de uma corrida e também a classificação geral de pilotos. Quando a corrida acaba são atribuidos pontos aos pilotos. A equipa também ganha os pontos que os seus pilotos ganham porque no final da temporada também se atribui a taça à melhor equipa. No caso de um piloto de testes a substituir excepcionalmente um piloto oficial, os pontos apenas vão para a equipa.
Alguém pode disponibilizar algumas ideias de como implementar isto? 🤔
N7_, em todo o teu enunciado não existe uma única dúvida concreta, muito menos de Java.
Se queres ajuda coloca as tuas dúvidas de programação de forma clara e concreta, caso contrário ninguém te vai conseguir ajudar...
Ok, vou tentar pormenorizar um pouco mais.
Tenho algo como isto
public class Equipa {
private ArrayList <Piloto> pilotosOficiais;
private ArrayList <Piloto> pilotosTeste;
public Equipa () {
pilotosOficiais = new ArrayList <Piloto> ();
pilotosTeste = new ArrayList <Piloto> ();
referente ao primeiro ponto tenho dúvidas em relação a "limitar" o ArrayList para apenas ter 2 pilotos oficiais (ou se não devo utilizar o Arraylist).
Repara na interpretação que se pode fazer desse enunciado:
A equipa (classe Equipa) pode ter até dois pilotos oficiais (se pode ter até 2 pilotos oficiais, quer dizer que pode ter só 1, logo não me parece fazer muito sentido ter 2 variáveis de instância do tipo Piloto, mas sim uma colecção de apenas 2 pilotos) e um conjunto de pilotos de teste (um Set portanto, e não um ArrayList).
É esta a interpretação que faço. Se podias ter 2 variáveis de instância do tipo Piloto, em vez do ArrayList de tamanho 2, e caso só tivesse 1, um deles ficaria a null, podias, mas eu ao olhar para somente para a API dessa classe iria dizer que ela tinha sempre 2 pilotos.
Que colecção sugerem utilizar para os pilotos oficiais (visto que pode ter até 2) ?
Na parte de atribuição de pontos, como devo fazer para atribuir pontos aos pilotos oficiais e às equipas, e quando se trata de um piloto de teste apenas á equipa?
Podes usar um array de duas posições para os pilotos.
A atribuição dos pontos é simples.
Tens uma pontuação para pilotos e outra para equipas.
A classe piloto deverá dizer que tipo de piloto é e se for um piloto de testes somas pontos apenas à equipa.
Podes criar um banco de Dados com Java DB Derby(2.6 megabytes) http://netbeans.org/kb/docs/ide/java-db_pt_BR.html. Cria entity class from Database e JPA controller from entity Classes(Classe CRUD:criar-ler-actualizar-apagar).http://netbeans.org/kb/docs/javaee/jpa-eclipselink-screencast.html.
Java DB Derby:http://db.apache.org/derby/
Mais uma dúvida (última espero eu ).
Tenho uma classe Temporada com um conjunto de Corridas.
Tenho de listar primeiro (por ordem de data) as corridas que ainda não decorreram seguidas das corridas (por ordem de data) já realizadas.
Para tratar da questão da data pensei em implementar a classe GregorianCalendar. É possível fazer o sort através disto?
Sim. Talvez queiras dar uma vista de olhos neste artigo sobre ordenação: http://wiki.portugal-a-programar.org/dev_geral:java:ordernarlistas
Estou com um problema que é provavelmente muito simples de resolver mas nao estou a conseguir.
Tenho a classe PTeste com um metodo calcularRacio() que devolve um float.
Tenho a classe Equipa com um conjunto de PTeste.
Preciso de imprimir o PTeste com o calcularRacio() mais alto.
Sugestões? :bored:
É fazer um ciclo foreach sobre esse conjunto e ires guardando numa variável auxiliar o PTeste cujo método calcularRacio() devolva o valor mais elevado. No fim retornas essa variável para um método que tratará de a imprimir.
Preciso de ajuda na ordenação das corridas.
Já estou a ordenar através da data com um Comparator
public class DateComparator implements Comparator<Corrida> {
public int compare(Corrida c1, Corrida c2) {
GregorianCalendar d1 = c1.getData();
GregorianCalendar d2 = c2.getData();
if(d1 == null || d2 == null) {
Collections.sort(temporada, new DateComparator());
Mas em primeiro lugar é preciso ordenar por um boolean (se já decorreram ou não).
Encontrei a classe BooleanComparator que tem um método que faz isso mesmo, mas sinceramente não faço ideia de como implementar isto.
Para tentar ordenar em primeiro lugar por boolean decidi criar um BooleanComparator
public class BooleanComparator implements Comparator<Corrida> {
Boolean b1 = c1.getDecorreu();
Boolean b2 = c2.getDecorreu();
E coloquei no método que faz o sort
public void ordenarCorridas () {
Collections.sort(temporada, new BooleanComparator());
Mas ao que parece apenas está a ordenar pelo DateComparator.
Existe alguma maneira de contornar isto ou terei de colocar os camparators em métodos distintos?
A ordem principal deve ser a última a ser ordenada. Ou seja, trocas.
Tal como utilizei os compartors para ordenar as corridas, estou agora a utlizar outro comparator para ordenar os pilotos oficiais.