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

Stato
Discussione chiusa ad ulteriori risposte.

Urubin

Nuovo Utente
15
5
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:

Mursey

Super Moderatore
Staff Forum
Utente Èlite
8,191
5,631
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...
 

Urubin

Nuovo Utente
15
5
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())
            {
                
            }
        

    
    }
    
    
}
 

_Achille

Utente Èlite
3,067
725
CPU
Intel i5-6600K @4.6 GHz
Dissipatore
Cryorig H5
Scheda Madre
ASRock Z170 Extreme 6
HDD
WesternDigital 1TB & Crucial MX200 250GB
RAM
Corsair Ven 16GB DDR4 2133MHz
GPU
Sapphire RX 580 Nitro+
Monitor
Dell S2418H
PSU
RM550X
Case
NZXT S340
Periferiche
Anne Pro 2, Razer Abyssus
OS
Windows 10 Pro
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.
 

Urubin

Nuovo Utente
15
5
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.
Post unito automaticamente:

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:

IlSelva

Nuovo Utente
2
0
Credo tu abbia sbagliato nell'aggiornamento della variabile cont, dovrebbe essere nel ciclo esterno non in quello interno
 

Eduadie

Utente Attivo
204
24
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:

Urubin

Nuovo Utente
15
5
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:)
 
  • Mi piace
Reazioni: Mursey e Eduadie
Stato
Discussione chiusa ad ulteriori risposte.

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!