Problema relativo all'istanziamento di oggetti

di il
4 risposte

Problema relativo all'istanziamento di oggetti

Ciao a tutti.
Sono nuovissimo sia del forum che di Java.
Ho una classe incidenteStradale,
Ogni incidente ha un codice identificativo univoco e moltissimi altri dati presenti su una tabella che posso importare (nome strada, progressiva, tipo di incidente .... ).
Per ogni incidente vorrei istanziare un oggetto.
Il problema è che ho oltre 14000 incidenti da analizzare, e mi risulterebbe estremamente comodo poter associare al reference il codice identificativo.
Vorrei evitare questa cosa (ho semplificato il problema degli id):


incidenteStradale id1 = new incidenteStradale();
incidenteStradale id2 = new incidenteStradale();
.
.
.
.
incidenteStradale id14293 = new incidenteStradale();


Dato che dispongo dell'array di stringhe: tuttiGliId;
Sarebbe estremamente comodo se potessi istanziarli in questo modo:

for (int x=0; x<14293; x++)
incidenteStradale tuttiGliId[jj] = new incidenteStradale();

così da creare tutte le istanze, ciascuna delle quali ha come nome il codice identificativo.
Con Matlab riesco tranquillamente a fare questa cosa, ma mi sono deciso che voglio imparare Java.
Qualcuno sa dirmi se esiste un modo per realizzare questa cosa, o suggerirmi una qualche alternativa?
Grazie in anticipo
Andrea

4 Risposte

  • Re: Problema relativo all'istanziamento di oggetti

    Se da un codice vuoi ottenere l'oggetto incidenteStradale, allora: una "mappa" (Map) in cui le chiavi sono i codici e i valori sono gli oggetti.
  • Re: Problema relativo all'istanziamento di oggetti

    Ciao

    In java è perfettamente fattibile istanziare gli oggetti all'interno di un ciclo.

    Guardando il frammento di codice che hai inserito immagino volessi scrivere qualcosa del genere (correggimi se sbaglio):
    
    IncidenteStradale[] incidenti = new IncidenteStradale[14293];
    for(int x=0;x<14293;x++) incidenti[x] = new IncidenteStradale(tuttiGliId[x]);
    
    Questo codice crea prima un vettore contentente oggetti della classe IncidenteStradale della lunghezza desiderata (se non la sai a priori o vuoi modificarla in seguito, ci sono strutture dati come le liste più adatte a tale scopo).
    Poi all'interno del ciclo for stai riempiendo il vettore con nuove istanze della tua classe.

    Per ciascuna passi al costruttore di IncidenteStradale la stringa identificativa dell'incidente come parametro, quindi dovrai ovviamente scrivere un costruttore che prende in ingresso una stringa per la classe IncidenteStradale (di cui ho riscritto il nome con la maiuscola perché si usa così nelle convenzioni dei nomi in Java).

    Se all'inizio del programma conti di importare i dati dalla tabella, potresti anche costruire un nuovo oggetto man mano che leggi un record della tua tabella, in questo caso dovresti prevedere uno o più altri costruttori e modificare leggermente la logica, ma non è nulla di impossibile...

    PS: Ovviamente stavo solo completando un po' la tua idea iniziale, se vuoi recuperare dalla tua struttura dati gli incidenti tramite il codice, segui il consiglio di andbin
  • Re: Problema relativo all'istanziamento di oggetti

    Ragazzi non so proprio come ringraziarvi! Siete stati fantastici!!!!
    Prima ho provato il preziosissimo codice di Ansharja (Grazie di cuore per la fatica di avermi dato le righe di codice )

    Incidenti[] incidenti = new Incidenti[3];
    String idIncidenti[] = {"id0","id1","id2"};
    for(int x=0;x<2;x++) incidenti[x] = new Incidenti(idIncidenti[x]);
    System.out.println(incidenti[0].getName());
    System.out.println(incidenti[1].getName());

    int chiave=2;
    incidenti[chiave] = new Incidenti(idIncidenti[chiave]);
    System.out.println(incidenti[chiave].getName());

    Grazie al quale sono riuscito ad applicare il consiglio di andbin, in questo modo.

    String chiave[]={"id0","id1","id2"};
    Map<String,Incidenti> map = new HashMap<>();

    //Crea tre oggetti incidenti
    for (int x=0; x<3;x++)
    map.put(chiave[x],new Incidenti(chiave[x]));

    //Richiama il metodo getName da ogni incidente a partire dall'id
    for (int x=0; x<3;x++)
    System.out.println(map.get(chiave[x]).getName());

    Senza di voi chissà quanto tempo avrei impiegato.... vi devo un favore
    Grazie!!!!!!!!!!!!!
  • Re: Problema relativo all'istanziamento di oggetti

    Prego, per così poco...

    Due piccoli consigli: innanzitutto quando posti del codice ricordati di inserirlo tra i tag code (si generano in automatico quando clicchi sul pulsante Code sopra all'area di testo): lo mantiene ordinato e si distingue ad occhio.

    L'altro può sembrare banale ma è utile per chi legge il tuo codice: se la tua classe Incidenti (che prima era incidenteStradale) deve contenere i dati relativi ad un singolo incidente, è molto meglio rinominare la classe in Incidente (o IncidenteStradale).
    Altrimenti rischi di confondere chi legge, che potrebbe aspettarsi una classe che contiene una collezione di oggetti di tipo Incidente, o qualcosa del genere...
    Per il vettore che hai usato invece (o un'altra collezione dati), il nome incidenti va benissimo.
Devi accedere o registrarti per scrivere nel forum
4 risposte