Visualizzazione dei risultati da 1 a 5 su 5

Discussione: Lista di oggetti

  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    31

    Lista di oggetti

    Salve a tutti Sto cercando di scrivere un metodo che, dato un insieme di nodi caratterizzati da coordinate (oltre che da un proprio ID e altre info), per ciascun nodo crea una lista dei nodi vicini in base ad una propria "vista".
    Vorrei quindi per ogni nodo memorizzare una lista degli oggetti (nodi) vicini.
    Ho provato così:
    codice:
    ArrayList<ArrayList<Nodo>> vicini=new ArrayList<ArrayList<Nodo>>();    
        for(int i=0;i<10;i++){
            for(int j=0;j<10;j++){
        double distanza =Math.sqrt((double) (nodo[i].getX()-nodo[j].getX())*(nodo[i].getX()-nodo[j].getX()) + (nodo[i].getY()-nodo[j].getY())*(nodo[i].getY()-nodo[j].getY()));  
        
        if(distanza!=0.0 && vista-distanza>0.0)
        {  vicini.get(i).add(nodo[j]);
        System.out.println("id vicino "+vicini.get(i).get(j).getId());
        } 
           }
    Ma mi dà Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    Dove sbaglio?
    Grazie in anticipo
    Ps: volevo creare un array bidimensionale, però non mi sembra una soluzione ottimale visto che i nodi dovrebbero essere parecchi (per adesso ne ho messi solo 10 per provare)
    Ultima modifica di Naomi92; 17-07-2015 a 15:37

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Beh... la prima riga crea un ArrayList completamente vuoto... nelle righe successive non lo tocchi (ovvero, non ci aggiungi nulla) e poche righe più sotto (dentro il corpo del if) vai a cercare di recuperarne l'i-esimo elemento... che ovviamente non esiste.


    codice:
    vicini.get(i)

    Da qui l'errore: stai cercando di prendere l'oggetto in posizione 0 da un ArrayList vuoto (che, quindi, non contiene elementi).


    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
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    31
    Hai ragione!
    Ho provato a scrivere, prima della get,
    codice:
    vicini.add(i, new ArrayList<Nodo>());
    ma il problema non si è risolto

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Posta il codice modificato.


    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
    Utente di HTML.it
    Registrato dal
    Apr 2015
    Messaggi
    31
    Ho risolto così
    codice:
    public void mappaVicini(){    for(int i=0;i<10;i++){
        for(int j=0;j<10;j++){
        double distanza =Math.sqrt((double) (nodo[i].getX()-nodo[j].getX())*(nodo[i].getX()-nodo[j].getX()) + (nodo[i].getY()-nodo[j].getY())*(nodo[i].getY()-nodo[j].getY()));  
        System.out.println(distanza+" ");
        System.out.println(vista-distanza);
        
        if(distanza!=0.0 && vista-distanza>0.0)
        {  
           nodo[i].vicini.add(nodo[j]);
           } 
           }
            }
      
    
    }
    Dove "vicini" è un ArrayList di nodi contenuto nella classe Nodo.
    Grazie comunque per avermi fatto capire dove sbagliavo!

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 © 2025 vBulletin Solutions, Inc. All rights reserved.