RISOLTO Conta quanti pazienti ci sono per ogni medico in un array (cicli for innestati)

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

Urubin

Nuovo Utente
Messaggi
15
Reazioni
5
Punteggio
23
Salve, allora io ho un array di pazienti (Lunghezza 10) contenente per ogni posizione: IL NOME DEL MEDICO, IL NOME DEL PAZIENTE (Un unico paziente per medico, i nomi dei pazienti sono tutti diversi.)
Devo fare il metodo statMedico che mi permetta di contare quanti pazienti ha ogni medico.

Qualcuno mi saprebbe aiutare? (Vi lascio anche la traccia completa dell'esercizio)


Si sviluppi una classe Paziente avente come variabili d’istanza il numero (intero) di tessera sanitaria ed un riferimento al proprio medico curante, con i relativi metodi di accesso get e set e i costruttori, metodo ToString.
Si sviluppi la classe Ospedale, un array della classe Paziente e la denominazione, con i seguenti metodi: Il metodo aggPaziente inserisce un oggetto paziente nell’ array pazienti, con un riferimento al proprio medico curante. Non devono mai essere duplicati pazienti gestire l’eventuale eccezione. Il metodo listaMedico restituisce un’array con tutti e soli i pazienti che hanno il medico specificato dal parametro esplicito come medico curante. Il metodo statMedico restituisce un riferimento al medico nell’ array pazienti avente il maggior numero di pazienti (conta i pazienti dei medici e restituisci il medico che ha piu’ pazienti), metodo boolean removPaziente che elimina un paziente da un certo medico.
Si sviluppi una classe Medico avente il nominativo (stringa) come variabili d’istanza, un array della classe Paziente, un metodo ToString e i costruttori.
Testare nel main tutti i metodi.



Se avete tempo mi sapreste dare degli aiuti su come iniziare poi la classe main?

GRAZIE MILLE ;)
 
Ultima modifica da un moderatore:
Salve, allora io ho un array di pazienti (Lunghezza 10) contenente per ogni posizione: IL NOME DEL MEDICO, IL NOME DEL PAZIENTE (Un unico paziente per medico, i nomi dei pazienti sono tutti diversi.)
Devo fare il metodo statMedico che mi permetta di contare quanti pazienti ha ogni medico.

Qualcuno mi saprebbe aiutare? (Vi lascio anche la traccia completa dell'esercizio)


Si sviluppi una classe Paziente avente come variabili d’istanza il numero (intero) di tessera sanitaria ed un riferimento al proprio medico curante, con i relativi metodi di accesso get e set e i costruttori, metodo ToString.
Si sviluppi la classe Ospedale, un array della classe Paziente e la denominazione, con i seguenti metodi: Il metodo aggPaziente inserisce un oggetto paziente nell’ array pazienti, con un riferimento al proprio medico curante. Non devono mai essere duplicati pazienti gestire l’eventuale eccezione. Il metodo listaMedico restituisce un’array con tutti e soli i pazienti che hanno il medico specificato dal parametro esplicito come medico curante. Il metodo statMedico restituisce un riferimento al medico nell’ array pazienti avente il maggior numero di pazienti (conta i pazienti dei medici e restituisci il medico che ha piu’ pazienti), metodo boolean removPaziente che elimina un paziente da un certo medico.
Si sviluppi una classe Medico avente il nominativo (stringa) come variabili d’istanza, un array della classe Paziente, un metodo ToString e i costruttori.
Testare nel main tutti i metodi.



Se avete tempo mi sapreste dare degli aiuti su come iniziare poi la classe main?

GRAZIE MILLE ;)
Cosa sei riuscito a fare?

Ricordo la regola che non si danno soluzioni senza tentativi...
 
CLASSE PAZIENTE

Codice:
package Hospital;
import java.util.*;

public class Paziente
{
    public String nome;
    public String medicocurante;

    public Paziente(String nome, String medicocurante)
    {
        this.nome = nome;
        this.medicocurante = medicocurante;
    }

    public String getNome()
    {
        return nome;
    }
    
    public void setNome(String nome)
    {
        this.nome = nome;
    }
    public String getMedicocurante()
    {
        return medicocurante;
    }
    public void setMedicocurante(String medicocurante)
    {
        this.medicocurante = medicocurante;
    }
    
    public String toString() {
        return "Paziente [nome=" + nome + ", medicocurante=" + medicocurante + "]";
    }
    
}

CLASSE OSPEDALE:


Java:
package Hospital;
import java.util.*;

public class Ospedale
{
    public Paziente[] p=new Paziente[10];
    public String denominazione;
    
    public void duplicati(int i)
    {
        for(int k=0; k<i; k++)
            if(p[k].getNome()==p[k+1].getNome())
                throw new IllegalArgumentException ("ERRORE, PAZIENTE RIPETUTO!");
    
    }
    
    
    public void aggPaziente(Paziente a)
    {
        for(int i=0; i<10; i++)
            if(p[i]==null)
            {
                p[i]=a;
                duplicati(i);
            }
    }
    
    public void listaMedico(String medicocur)
    {
        int conta=0;
        boolean nessunpaziente=true;
        
        System.out.println("I pazienti che hanno come medico: " + medicocur + " sono: ");
        
        for(int i=0; i<10; i++)
            if(p[i].getMedicocurante().equals(medicocur))
            {
                System.out.println(p[i].getNome());
                nessunpaziente=false;
            }
        
        if(nessunpaziente==true)
            System.out.println(" NESSUNO");
    
    }

    public void statMedico()
    {
        Paziente[] conta=new Paziente[10];
        
        String s="0";
        for(int i=0; i<10; i++)
            for(int j=i; j<9; j++)
            if(p[i].getMedicocurante()=p[j+1].getMedicocurante())
            {
                
            }
        

    
    }
    
    
}
 
In duplicati sei sicuro di volere == o intendi un .equals()?

Comunque la convenzione per i nomi dice che vanno scritte camelCase, esempio medicoCurante, nessunPaziente ecc…

Se devi contare hai bisogno di una mappa. Se non hai trovato il medico fino ad ora aggiungi la chiave e 1, altrimenti incrementi il valore di 1.
 
In duplicati sei sicuro di volere == o intendi un .equals()?

Comunque la convenzione per i nomi dice che vanno scritte camelCase, esempio medicoCurante, nessunPaziente ecc…

Se devi contare hai bisogno di una mappa. Se non hai trovato il medico fino ad ora aggiungi la chiave e 1, altrimenti incrementi il valore di 1.

Ah grazie non sapevo del camelCase. Comunque Si intendo un .equals() ma non capisco ancora come contare per ogni medico quanti pazienti ci sono.
--- i due messaggi sono stati uniti ---
Java:
    public void statMedico()
        {
            Paziente[] p1=new Paziente[10];
            String[] s=new String[10];
            int[] arr=new int[10];
            
            
            for(int i=0;i<10;i++)
                p1[i]=p[i];
                    
            for(int i=0;i<10;i++)
                arr[i]=0;
            
            
            for(int i=0; i<10; i++)
            {
                int cont=0;
                if(p1[i]!=null)
                {
                    s[cont]=p1[i].getMedicocurante();
                    for(int j=i; j<10; j++)
                    {
                        if((p1[i].getMedicocurante()).equals(p[j].getMedicocurante()))
                        {
                            p1[j]=null;
                            arr[cont]=arr[cont]+1;
                        }       
                        cont++;
                    }   
                }
                        
            }   
            
            for(int i=0;i<10;i++)
            {
                System.out.println("medico: "+s[i]);
                System.out.println("numero +"+arr[i]);
            }
        }

Ho fatto progressi eppure continua a non funzionare suggerimenti?
 
Ultima modifica:
Credo tu abbia sbagliato nell'aggiornamento della variabile cont, dovrebbe essere nel ciclo esterno non in quello interno
 
Ho fatto una bozza rapida in c++ ma è di facile compresione:
C++:
#include <iostream>

using namespace std;

int main()
{
    int esiste = 0;
    int conta_medici = 0;
   int pazienteXMedico[10] = {1,2,3,2,1,2,1,3,4,5};
   int medico[10] = {0,0,0,0,0,0,0,0,0,0};
   int numPazienti[10] = {0,0,0,0,0,0,0,0,0,0};

    for(int i=0;i<10;i++)
    {
        for(int j=0;j<10;j++)
        {
            if(pazienteXMedico[i] == medico[j])
                esiste = 1;
        }

        if(esiste == 0)
        {
            medico[conta_medici++] = pazienteXMedico[i];
        } else
        {
            esiste = 0;
        }
    }

    for(int i=0;i<10;i++)
    {
        for(int j=0;j<conta_medici;j++)
        {
            if(pazienteXMedico[i] == medico[j])
            {
                numPazienti[j] += 1;
            }
        }
    }

    for(int i=0;i<conta_medici;i++)
    {
        cout << medico[i] << " - " << numPazienti[i] << endl;
    }
}

Sicuramente si può fare di meglio ma questa è una prima soluzione su cui ragionare.
Interessano solo i medici visto che i pazienti son tutti diversi e non dobbiamo fare altro che una conta degli elementi uguali.

Prima li estraggo senza ripetizioni e dopo li conto.

Spero di averti dato un buono spunto.
 
Ultima modifica:
Ho fatto una bozza rapida in c++ ma è di facile compresione:
C++:
#include <iostream>

using namespace std;

int main()
{
    int esiste = 0;
    int conta_medici = 0;
   int pazienteXMedico[10] = {1,2,3,2,1,2,1,3,4,5};
   int medico[10] = {0,0,0,0,0,0,0,0,0,0};
   int numPazienti[10] = {0,0,0,0,0,0,0,0,0,0};

    for(int i=0;i<10;i++)
    {
        for(int j=0;j<10;j++)
        {
            if(pazienteXMedico[i] == medico[j])
                esiste = 1;
        }

        if(esiste == 0)
        {
            medico[conta_medici++] = pazienteXMedico[i];
        } else
        {
            esiste = 0;
        }
    }

    for(int i=0;i<10;i++)
    {
        for(int j=0;j<conta_medici;j++)
        {
            if(pazienteXMedico[i] == medico[j])
            {
                numPazienti[j] += 1;
            }
        }
    }

    for(int i=0;i<conta_medici;i++)
    {
        cout << medico[i] << " - " << numPazienti[i] << endl;
    }
}

Sicuramente si può fare di meglio ma questa è una prima soluzione su cui ragionare.
Interessano solo i medici visto che i pazienti son tutti diversi e non dobbiamo fare altro che una conta degli elementi uguali.

Prima li estraggo senza ripetizioni e dopo li conto.

Spero di averti dato un buono spunto.

Grazie mille per questa utilissima bozza.
Scusatemi per il delay nella risposta!
L'esercizio alla fine è riuscito! (Menomale :hihi:)
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top