Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    Ricerca di una stringa in un array di stringhe

    Ho implementato un grafo tramite la sua matrice di adiacenza e un vettore con i nomi dei nodi in questo modo:

    codice:
    public class Grafo {
    
        public double [][] matrice = new double[0][0]; // è la matrice di adiacenza del nodo
        public String [] nodi = new String[0]; // è il vettoe con i nomi dei nodi del grafo
        
    
        /**
         * Costruisce un grafo rappresentato da una matrice che contine
         * matrice di adiacenza e nell'ultima colonna i nomi dei ndi
         * @param matrice_adiacenza matrice di adiacenza del grafo
         * @param nomi vettore con i nomi dei nodi del grafo
         */
        public Grafo(double [][] matrice_adiacenza, String[] nomi)
        {
            matrice = matrice_adiacenza;
            nodi=nomi;
        }
    
    }
    devo realizzare un metodo che dato il nome del nodo del grafo mi restituisca l'indice corrispondente in modo da sapere quale colonna prendere.
    Consultando la documentazione ho elaborato questi due metodi ma entrambi non funzionano, o entra dentro il ciclo while oppure se ci entra mi da overflow del vettore

    METODO1
    codice:
        /**
         * Restituisce l'indice del nodo cercato 
         * @param nodo di cui vogliamo sapere l'indice
         * @return posizione (indice) del nodo nel vettore
         */
        public int getInt(String nodo)
        {        
            int posizione=0;
            int flag = nodo.compareTo(nodi[posizione]);
            while(flag != 0) //ricerco la posizione "numerica" nel vettore dei nodi
            {
                posizione++;
                flag = nodo.compareTo(nodi[posizione]);
            }
            return posizione;
        }
    METODO2
    codice:
        /**
         * Restituisce l'indice del nodo cercato 
         * @param nodo di cui vogliamo sapere l'indice
         * @return posizione (indice) del nodo nel vettore
         */
        public int getInt(String nodo)
        {        
            int posizione=0;
            while(!nodi[posizione].equals(nodo)) //ricerco la posizione "numerica" nel vettore 
                     posizione++;
            return posizione;
        }
    no so come fare ed è un metodo a cui non posso rinunciare...
    Aspetto vostri consigli/correzioni e vi ringrazio in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502
    Aumenti posizione senza mai controllare se va fuori degli indici delle matrici?
    al volante son nervoso

  3. #3
    non controllo che sfori gli indici in quanto come argomenti del metodo passo solo i nomi in precedenza dichiarati all'interno del vettore... cmq non riesco a capire come fare se per esempio io ho un vettore

    V=[a,b,c,d,e]

    ed invoco il metodo getInt(a) tutto torna, mentre se invoco getInt(b) non mi esce dal loop.... e mi va in overflow
    vorrei sapere come fare per aver un controllo su due stringhe uguali in modo da mettere una condizione nel while che scorra il vettore fino a che non trova la stringa in questione e restituisca l'indice cercato...

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502
    A me il metodo 1 non da problemi.
    L'altro non l'ho testato ma ho visto una cosa che non capisco.
    Matrice e vettore li hai dichiarati di lunghezza zero?
    al volante son nervoso

  5. #5
    Ho creato un file per testare il metodo e funziona

    codice:
         public static void main(String args[])
        {
            double [][] matrice = { {0,10,0,5,0} , {0,0,1,2,0} , {0,0,0,0,4} , {0,3,9,0,2} , {7,0,6,0,0} };
            String[] nomi = {"s","u","v","x","y"};
            Grafo grafo = new Grafo(matrice , nomi);
            grafo.printMatrix();
            System.out.println("ecco l'indice di s: "+grafo.getInt("s")+"\n");
            System.out.println("ecco l'indice di u: "+grafo.getInt("u")+"\n");
            System.out.println("ecco l'indice di y: "+grafo.getInt("y")+"\n");
            String x1= "s";
            String x2= "u";
            String x3= "y";
            System.out.println("ecco l'indice di s: "+grafo.getInt(x1)+"\n");
            System.out.println("ecco l'indice di u: "+grafo.getInt(x2)+"\n");
            System.out.println("ecco l'indice di y: "+grafo.getInt(x3)+"\n");
            
         }

  6. #6
    Originariamente inviato da Rubox
    A me il metodo 1 non da problemi.
    L'altro non l'ho testato ma ho visto una cosa che non capisco.
    Matrice e vettore li hai dichiarati di lunghezza zero?
    all'inizio si e poi al momento dell'inserimento del grafo sovrascrivo

  7. #7
    ho risolto modificando il metodo in questo modo:
    codice:
        public int getInt(String nodo)
        {        
            int posizione=0;
            while (!nodi[posizione].equalsIgnoreCase(nodo))
                posizione++;
            return posizione;
        }

  8. #8
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502
    Originariamente inviato da zanzi85
    ho risolto modificando il metodo in questo modo:
    codice:
        public int getInt(String nodo)
        {        
            int posizione=0;
            while (!nodi[posizione].equalsIgnoreCase(nodo))
                posizione++;
            return posizione;
        }
    vuoi dire che mettevi le maiuscole e poi chiedevi le minuscole e viceversa?
    al volante son nervoso

  9. #9
    no diciamo che questo metodo lo usavo in un'altra classe all'interno di un altro metodo e se mettevo come argomento del metodo getInt il nome di un nodo che non era il primo del vettore nodi mi andava in overflow....

  10. #10
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    502
    Per curiosità ho provato anche metodo 2 prima versione, e non mi va in "overflow" (che intendi in questo caso con questo termine?) anche dando come nodo non il primo valore.
    Può darsi che il problema risieda in chi chiama questo metodo.
    al volante son nervoso

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.