PROBLEMA [JAVA] Aiuto risoluzione esercizio

minimi

Nuovo Utente
41
0
Buonasera, ho un esame a breve e sto cercando di risolvere vecchie prove di esame del professore.
Questa non riesco completamente a farla perchè non so bene come gestire collections dentro collections (in particolare una list dentro una queue).
Vi mando il testo dell'esercizio e le 4 classi che sto provando a fare (non c'è il main ma in quello pensavo semplicemente di fare uno switch che richiama i vari metodi).
Ho provato a creare un costruttore nella super classe che contiene una lista ma non sono sicuro della legalità della cosa(?)
Scusate la bassa qualità della foto del testo e vi ringrazio in anticipo.
TestoEsame.jpg
Java:
import java.util.ArrayList;
import java.util.List;


public class Esame {
   
    private int codP;
    private String data;
   
    List<Esame> lista_esami=new ArrayList<>();
   
    public Esame(int codP, String data) {
       this.setCodP(codP);
       this.setData(data);
    }
    public Esame() {
       
    }
   
     public Esame(int codP, String data, List lista_esame) {
        this.setCodP(codP); //Credo che non sia tanto legale questo costruttore ma non so in che altro modo farlo
        this.setData(data);
    }
    /**
     * @return the codP
     */
    public int getCodP() {
        return codP;
    }

    /**
     * @param codP the codP to set
     */
    public void setCodP(int codP) {
        this.codP = codP;
    }

    /**
     * @return the data
     */
    public String getData() {
        return data;
    }

    /**
     * @param data the data to set
     */
    public void setData(String data) {
        this.data = data;
    }
   
    public String toString() {
        return("Id paziente: " +codP + "Data: " +data);
    }
}

Java:
public class EsameS extends Esame {
    private int cod_esame;
    private double risultato;
   
    public EsameS(int codP, String data, int cod_esame, double risultato) {
        super(codP, data);
        this.setCod_esame(cod_esame);
        risultato=0.0;
    }
   
   
    public EsameS(int cod_esame, int risultato) {
        this.setCod_esame(cod_esame);
        risultato=0;
    }
   
    public EsameS() {
       
    }
           
   


    /**
     * @return the cod_esame
     */
    public int getCod_esame() {
        return cod_esame;
    }

    /**
     * @param cod_esame the cod_esame to set
     */
    public void setCod_esame(int cod_esame) {
       if(cod_esame>=1 && cod_esame<=100){
        this.cod_esame = cod_esame;
    }
       else {
          System.out.println("Esame non valido");
       }
    }

    /**
     * @return the risultato
     */
    public double getRisultato() {
        return risultato;
    }

    /**
     * @param risultato the risultato to set
     */
    public void setRisultato(double risultato) {
        this.risultato = risultato;
    }
   
    public String toString() {
        return(super.toString() +"Codice Esame: " +cod_esame +"Risultato: " +risultato);
    }
}

Java:
public class Radiografia extends Esame {
    private String tipo, referto;

    public Radiografia(int codP, String data, String tipo, String referto){
        super(codP, data);
        this.setTipo(tipo);
        this.referto="null";
        }  
    public Radiografia(String tipo, String referto) {
        this.setTipo(tipo);
        referto="null";
        }
    /**
     * @return the tipo
     */
    public String getTipo() {
        return tipo;
    }

    /**
     * @param tipo the tipo to set
     */
    public void setTipo(String tipo) {
        this.tipo = tipo;
    }

    /**
     * @return the referto
     */
    public String getReferto() {
        return referto;
    }

    /**
     * @param referto the referto to set
     */
    public void setReferto(String referto) {
        this.referto = referto;
    }
@Override
        public String toString() {
            return(super.toString() +"Tipo esame: " +tipo +"Risultato: " +referto);
        }
}
Java:
import java.util.*;

//QUESTA CLASSE E' INCOMPLETA

public class Analisi {
   
    Queue<Esame> ricette= new LinkedList<>();
    List<Esame> esamiP= new ArrayList<>();
    List<Esame> esami= new ArrayList<>();
   
   
    public void aggiungiRicetta(Scanner s) throws InputMismatchException {
        System.out.println("Inserisci codice paziente");
        int codP=s.nextInt();
        System.out.println("Inserisci data");
        String data=s.next();
       
        int selezione=0 ;
        while(selezione!=-1) {
           
            System.out.println("Scegli il tipo di esame: ");
            System.out.println("1. Esame del Sangue");
            System.out.println("2. Radiografia");
            System.out.println("-1. Fine inserimento");
            selezione=s.nextInt();
            switch(selezione) {
                case 1:
                    System.out.println("Inserire codice esame (da 1 a 100)");
                    int cod_esame=s.nextInt();
                    int risultato=0;
                    esami.add(new EsameS(cod_esame, risultato));
                    break;
               
                case 2:
                    System.out.println("Inserire tipologia esame");
                    String tipo= s.next();
                    String referto="null";
                    esami.add(new Radiografia(tipo, referto));
                    break;
               
                case -1:
                    break;
                   
                default:
                    System.out.println("Valore non valido");
                    break;
                   
            }
        }
        ricette.add(new Esame(codP, data, esami));
       
    }
    //Preleva ricetta da "ricette", set referto o risultato da "esami", inserire in esamiP
    public void aggiungiPronta(Scanner s) {
        for(int i=0; i<esami.size(); i++){
       
            //Sto cercando di accedere al referto/risultato dentro la lista esami ma non so come
            ricette.element().esami.getRisultato();

       
    }
}
   
}
 

BAT

Moderatore
Staff Forum
Utente Èlite
22,944
11,580
CPU
1-Neurone
Dissipatore
Ventaglio
RAM
Scarsa
Net
Segnali di fumo
OS
Windows 10000 BUG
Ho dato solo una rapida occhiata, a mio avviso ci sono degli errori da correggere nella progettazione delle classi:
hai chiamato una classe Esame, ma quello non è un esame ma una Ricetta (infatti contiene un codice paziente, una data e una lista di esami);
invece la classe Esame più generica al più contiene un attributo tipoEsame (per es. String da inizializzare con "analisi sangue" o "radiografia", è solo un'idea);
le sottoclassi le chiami AnalisiSangue e Radiografia (sempre per esempio...) ed il costruttore senza paramentri provvede all'inizializzazione del tipo.
Insomma, correggi la struttura delle classi prima di tutto.

Avrei qualche suggerismento "stilistico":
dai nomi significativi: se chiami una classe EsameS sfido chiunque a capire che è un esame del sangue!
Rispetta le convenzioni Java, per es. evita nomi di variabile con l'underscore come cod_esame, molto meglio codiceEsame o codEsame
semplificati la vita evitando di usare this quando non è necessario: se hai un attributo della classe che si chiama tipo, chiama il parametro del costruttore semplicemente t, così eviti cose come this.tipo = tipo; e rendi il codice più leggibile con un semplice tipo = t; a patto però che nei commenti di documentazione della classe indichi che t è il "tipo".
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili