Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    Riempimento ArrayList

    Ciao a tutti..sto svolgento un appello di programmazione orientata agli oggetti..e mi sono bloccato all' ultimo punto...
    Ho una classe CampionatoDiCalcio e all'interno di essa devo implementare un metodo che
    Restituisce una lista di 11 calciatori distinti (un portiere, quattro difensori, quattro centrocampisti, due attaccanti) scelti tra quelli che costano di meno (cioè aventi nel campionato corrente gli ingaggi più piccoli).
    La classe calciatore è la seguente:
    codice:
    public class Calciatore {
    private String nome;
    private int datanascita;
    private String ruolo;
    private int goals;
    private int ingaggio;
    public Calciatore(String nome, int datanascita, String ruolo, int goals, int ingaggio) {
    	this.nome = nome;
    	this.datanascita = datanascita;
    	this.ruolo = ruolo;
    	this.goals = goals;
            this.ingaggio=ingaggio;
    }
    public String getNome() {
    	return nome;
    }
    public void setNome(String nome) {
    	this.nome = nome;
    }
    public int getDatanascita() {
    	return datanascita;
    }
    public void setDatanascita(int datanascita) {
    	this.datanascita = datanascita;
    }
    public String getRuolo() {
    	return ruolo;
    }
    public void setRuolo(String ruolo) {
    	this.ruolo = ruolo;
    }
    public int getGoals() {
    	return goals;
    }
    public void setGoals(int goals) {
    	this.goals = goals;
    }
    public int getIngaggio() {
    	return ingaggio;
    }
    public void setIngaggio(int ingaggio) {
    	this.ingaggio = ingaggio;
    @Override
    public String toString() {
    	return "Calciatore [datanascita=" + datanascita + ", goals=" + goals
    			+ ", nome=" + nome + ", ruolo=" + ruolo +",ingaggio="+ingaggio "]";
    }
    public boolean equals(Object o){
    	if(o instanceof Calciatore){
    		Calciatore c=(Calciatore)o;
    	return c.getNome().equals(this.getNome())&& c.getDatanascita()==(this.getDatanascita());
    }
    	return false;
    }
    }
    Non riesco a capire come fare a riempire questa lista di 11 giocatori...o meglio come faccio a mettere un portiere,4 difensori ecc...??avevo pensato di creare 4 liste..una di portieri,una di difensori,una di centrocampisti e l altra di attaccanti..riordinarle in termini di ingaggio crescente,poi creo 4 nuove liste e le riempio una con i primi 4 difensori,una con i primi 4 centrocampisti ecc..e poi concateno le 4 liste..ma sembra troppo complessa l' idea!!!!!!!...qualcuno mi aiuti..sono sicuro che c'è una strada molto più semplice...grazie

    Avrei un'altra domanda..nella traccia la descrizione della classe calciatore è la seguente..

    Un Calciatore è caratterizzato dal nome e dalla data di nascita che lo identificano univocamente, dal ruolo in cui gioca (POR,DIF,CEN,ATT), dal numero di goal fatti o subiti durante tutta la sua carriera (un intero che rappresenta i gol subiti nel caso di un portiere ed i goal segnati per gli altri tipi di giocatori)e da un ingaggio.

    Come faccio a distinguere i goal subiti(se portiere) ed i goal fatti(se giocatore)???

    HELP!!!!!!

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Perchè non provi a mettere in pratica la tua soluzione? Non mi sembra né complessa, né cattiva... anzi, direi che può andare benissimo. Solo puoi risparmiarti di creare altre 4 liste solo per scegliere quelli da inserire: dalle 4 liste totali scegli un giocatore dalla prima e lo metti nell'ArrayList, poi ne scegli 4 dalla seconda e li metti nell'ArrayList, ecc...

    Per quanto riguarda il numero di goal subiti, è un non problema e te lo dice: c'è un campo che ti dice il ruolo del giocatore (portiere, difensore, ecc)... mi pare ovvio che se il giocatore è un portiere l'intero è il numero di goal subiti, altrimenti è il numero di goal fatti.

    codice:
    Nome: Andrea
    Ruolo: PORTIERE
    NumGoal: 4
    Questo è un portiere... il numero di goal indica quanti ne ha subiti

    codice:
    Nome: Pippo
    Ruolo: DIFENSORE
    NumGoal: 1
    Questo è un difensore... il numero di goal indica quanti ne ha fatti.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Ho provato a concretizzare la mia idea e nella classe campionato ho implementato il seguente metodo (Ovviamente ho creato nella classe calciatore il compareto rispetto all' ingaggio):
    [CODE]
    public Collection<Calciatore> squadraEconomica(){
    Collection<Calciatore>squadretta=new LinkedList<Calciatore>();
    LinkedList<Calciatore>portieri=new LinkedList<Calciatore>();
    LinkedList<Calciatore>difensori=new LinkedList<Calciatore>();
    LinkedList<Calciatore>centrocampisti=new LinkedList<Calciatore>();
    LinkedList<Calciatore>attaccanti=new LinkedList<Calciatore>();

    for(Calciatore c: listcalciatori){
    if(c.getRuolo().equals("Portiere")&& !portieri.contains(c))
    portieri.add(c);
    if(c.getRuolo().equals("Difensore")&& !difensori.contains(c))
    difensori.add(c);
    if(c.getRuolo().equals("Centrocampista")&& !centrocampisti.contains(c))
    centrocampisti.add(c);
    if(c.getRuolo().equals("Attaccante")&& !attaccanti.contains(c))
    attaccanti.add(c);
    }
    Collections.sort( portieri);
    Collections.sort( difensori);
    Collections.sort( centrocampisti);
    Collections.sort( attaccanti);
    int i=0;
    while(i<2){
    Contratto c=portieri.get(i);
    squadretta.add(c);
    i++;
    }

    while(i<5){
    Contratto c=difensori.get(i);
    squadretta.add(c);
    i++;
    }
    while(i<5){
    Contratto c=centrocampisti.get(i);
    squadretta.add(c);
    i++;
    }
    while(i<3){
    Contratto c=attaccanti.get(i);
    squadretta.add(c);
    i++;
    }
    return squadretta;
    }
    [7CODE]
    Lanciando questo metodo però non mi stampa una lista di 5 oggetti e non di 11 come richiesto..inoltre come risultato non visualizzo l oggetto vero e proprio ma un suo codice del tipo
    codice:
    Calciatore@190d11 
    Calciatore@a90653 
    Calciatore@de6ced 
    Calciatore@c17164 
    Calciatore@1fb8ee3
    All' interno del main dopo aver creato le opportune liste e tutto il metodo lo ho lanciato così:
    codice:
    Campionato euro=new Campionato(listcalciatori,listsquadre,listpartite);
    Collection<Calciatore>squadretta=euro.squadraEconomica();
    for(Calciatore cal:squadretta){
    	System.out.println(cal);
    Qualcuno mi sa dare una spiegazione???

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Stai stampando degli oggetti, quindi viene invocato il metodo toString(). Se non è ridefinito, viene usato il metodo toString() della classe Object che non fa altro che stampare l'indirizzo in memoria dell'oggetto (circa). Ecco perchè vedi quelle "schifezze".

    O ridefinisci il metodo toString() nella classe Calciatore in modo da fargli ritornare qualcosa di utile e leggibile all'interno di una stringa (il nome? Una serie di informazioni?), oppure, invece di buttare in output l'oggetto, butta in output le sue caratteristiche (prendendole tramite metodi appositi che dovrai implementare... i cosiddetti metodi getter).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    grazie per la disponibilità LeleFT....ho corretto il toString e il problema delle "schifezze" si è risolto ma non capisco perchè mi stampa solo un portiere e tre difensori invece di stamparmi la squadra completa..tu credi che il modo in cui ho fuso le rispettive liste sia giusto??perchè non deve stamparmi i centrocampisti e gli attaccanti?mhà...scusa se ti sto stressando ma se non riesco a capire l' errore ed a completare gli esercizi perfettamente esco pazzo

  6. #6
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Semplicemetne perchè, quando vai a riempire l'ArrayList "squadretta" usi 4 cicli while che basano la loro condizione sulla variabile "i"... ma tu, tale variabile, non la riazzeri mai tra un ciclo while e l'altro.... quindi, il primo while verrà eseguito tutto... e all'uscita "i" varrà 2. il secondo verrà eseguito tutto tranne gli ultimi due cicli (perchè parte da i = 2) e uscirà con i = 5. Gli altri non verrano mai eseguiti perchè "i" è già uguale a 5.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  7. #7
    Vero!!grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2026 vBulletin Solutions, Inc. All rights reserved.