Jump to content
N7_

Dúvidas - Temporada F1

Recommended Posts

N7_

Boas!

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?  🤔

Cumps.

Share this post


Link to post
Share on other sites
M6

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...


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
N7_

Ok, vou tentar pormenorizar um pouco mais.

Tenho algo como isto

import java.util.ArrayList;

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).

Share this post


Link to post
Share on other sites
Baderous

Repara na interpretação que se pode fazer desse enunciado:

->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 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.

Share this post


Link to post
Share on other sites
N7_

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?

Share this post


Link to post
Share on other sites
M6

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.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
N7_

Mais uma dúvida (última espero eu  :D ).

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?

Cumps.

Share this post


Link to post
Share on other sites
N7_

:wallbash:

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:

Share this post


Link to post
Share on other sites
Baderous

É 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.

Share this post


Link to post
Share on other sites
N7_

Preciso de ajuda na ordenação das corridas.

Já estou a ordenar através da data com um Comparator

import java.util.Comparator;
import java.util.GregorianCalendar;

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) {
            throw new NullPointerException();
        }

        return d1.compareTo(d2);
    }

}

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.

Ajuda?

Cumps.

Share this post


Link to post
Share on other sites
N7_

Para tentar ordenar em primeiro lugar por boolean decidi criar um BooleanComparator

import java.util.Comparator;


public class BooleanComparator implements Comparator<Corrida> {

    public int compare(Corrida c1, Corrida c2) {
        Boolean b1 = c1.getDecorreu();
        Boolean b2 = c2.getDecorreu();

        if(b1 == null || b2 == null) {
            throw new NullPointerException();
        }

        return b1.compareTo(b2);
    }

}

E coloquei no método que faz o sort

    public void ordenarCorridas () {
        Collections.sort(temporada, new BooleanComparator());
        Collections.sort(temporada, new DateComparator());
    }

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?

Share this post


Link to post
Share on other sites
KTachyon

A ordem principal deve ser a última a ser ordenada. Ou seja, trocas.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
N7_

Tal como utilizei os compartors para ordenar as corridas, estou agora a utlizar outro comparator para ordenar os pilotos oficiais.

public int getPontos () {
        totalPontos = (pontosAcumulados + (nrInfraccoes * (-3)));
        return totalPontos;
    }

import java.util.Comparator;


public class PointsComparator implements Comparator<POficial> {

    public int compare(POficial p1, POficial p2) {
        Integer i1 = p1.getPontos();
        Integer i2 = p2.getPontos();

        if(i1 == null || i2 == null) {
            throw new NullPointerException();
        }

        return i1.compareTo(i2);
    }

}

public void actualizarTabelaClassificacao () {
        Collections.sort(pilotos, new PointsComparator());
    }

Mas por alguma razão não está a ordenar.

Ajuda?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.