Visualizzazione dei risultati da 1 a 10 su 10

Discussione: problema confronto xml

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    47

    problema confronto xml

    Devo programmare un codice che mi permetta di confrontare due liste xml..ho trovato due problemi:uno più teorico e l'altro riguardo la programmazione stessa.

    1-Il primo problema riguarda in verità dei concetti teorici ..ho fatto un programma con molte classi ..tra queste vi sono due classi per creare due list da file xml...il problema è che,naturalmente, questi metodi che ho applicato li richiamo in un'altra classe che non ha le variabili interessate (lista1,lista2)che sono presenti nelle relative classi.
    A questo punto il problema è:come faccio a gestirmi se ho bisogno di un metodo (presente in un ennesima classe) in cui mi servono entrambe?(se richiamo il metodo nella classe di "test" non ho effettivamente inizializzato le liste,che sono invece contenute nelle suddette classi..mentre se decidessi di mettere il metodo in una delle due classi "che leggono" avrò effettivamente una delle due liste disponibili..ma l'altra sarà nell'altra classe!).
    Sicuramente questo è un problema di facile risoluzione e testimonia alcune mie lacune...però una spiegazione su come comportarmi mi chiarirebbe molto le idee!

    2-Il secondo dubbio è..create le due liste (a e b;aventi all'interno elementi string) devo verificare se hanno elementi uguali..ho provato ad usare equals ma non compie alcuna verifica..semplicemente mi scrive gli elementi presenti nella stessa posizione (i).
    codice:
    if(a.get(i).equals(b.get(i)));
    Ringrazio in anticipo chi mi aiuterà con questi miei dubbi forse banali.

  2. #2
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Non mi è chiaro cosa contengono le due liste: l'elenco dei tags XML? Perchè in questo caso non credo che una lista sia la struttura dati corretta da utilizzare (un documento XML è a tutti gli effetti un albero). Prova a spiegarti meglio, eventualmente posso farti un esempio di quello che intendo.

    Il confronto con equals (se sei sicuro che la lista è composta solo ed esclusivamente da stringhe, ossia niente null o altri tipi di oggetti) è corretto, ma l'istruzione che hai riportato, così com'è, dice semplicemente: "se gli elementi alle posizioni corrispondenti sono uguali, non fare nulla". Hai semplicemente scritto in pseudocodice, oppure è uno snippet a tutti gli effetti?

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    47
    le liste contengono il contenuto dei tags di un file xml.
    molto semplicemente se:
    codice:
    <registro>
    <alunni>
    <alunno>
    <nome>Mario</nome>
    <eta>17</eta>
    </alunno>
    </alunni>
    </registro>
    Se avessi questa struttura in xml avrei una lista che contiene "Mario" e "17" entrambi in formato String.

    Il confronto con equals (se sei sicuro che la lista è composta solo ed esclusivamente da stringhe, ossia niente null o altri tipi di oggetti) è corretto, ma l'istruzione che hai riportato, così com'è, dice semplicemente: "se gli elementi alle posizioni corrispondenti sono uguali, non fare nulla". Hai semplicemente scritto in pseudocodice, oppure è uno snippet a tutti gli effetti?
    Ecco,qui non capisco....ho semplicemente seguito le istruzioni presenti nella api di java per "list interface" cioè il fatto che con get ottengo un determinato dato e equals lo metto in relazione con un altro.

  4. #4
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Ok, relativamente al contenuto delle liste, ora è più chiaro.
    Comunque, tieni presente che l'utilizzo di strutture dati a liste è potenzialmente sbagliato. Ad esempio, i due documenti:

    codice:
    <registro>
    <alunni>
    <alunno>
    <nome>Mario</nome>
    <eta>17</eta>
    </alunno>
    </alunni>
    </registro>
    
    e
    
    <registro>
    <nome>
    Mario
    <anni>17</anni>
    </nome>
    </registro>
    sono evidentemente diversi nella loro struttura, ma il tuo confronto fra liste potrebbe dirti che sono uguali. Vuole essere solo uno spunto, ovviamente sei tu che conosci scopo e finalità dell'applicazione...

    Per quanto riguarda la seconda parte... quello che voglio dire è che una semplice istruzione generica

    codice:
    if ( variabile_booleana ) ;
    COSI' COM'E', non fa niente: esegue un controllo e basta, non viene fatto nulla sia che sia vero, sia che sia falso. Ovviamente devi andare a scrivere del codice nel corpo dell'if. Se provi a postare una porzione più completa di codice forse ci capiamo meglio.
    In ogni caso, tu che struttura dati stai usando? Una di libreria, oppure una che hai definito tu?

  5. #5
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    47
    Da quello che ho capito, l'istruzione a.get(i).equals(b.get(i) riporta,in questo caso una variabile booleana o true o false..
    Tenendo conto di questo,ho riscritto il codice..ma qui incontro un ennesimo problema sempre collegato all'istruzione:
    codice:
    (...)
    public class ConfrontoListe extends LettoreAlimenti {
    	
    	
    	//metodo che ci serve per confrontare le due liste xml che abbiamo
    	public void ConfrontoXML(ArrayList a, ArrayList b,int numpersone){
    		int j=0;
    		//creiamo una serie di controlli per vedere se ci sono dati uguali..iniziamo dal nome e verifichiamo gli altri elementi
    		for(int i=0;i<=a.size();i++){
    			//il for ci serve per scorrere la lista (in questo caso la prima "inserita")
    			int variabile1;
    System.out.println(a.get(i));
    boolean sino=a.get(i).equals(b.get(j));
    
    			if(sino==true);
    			{
    			System.out.println("ho trovato un elemento uguale!!!il nome"+a.get(i)+""+b.get(j));
    			}
    			if(sino=false){
    				
    			}
    			
    			}
    	}
    	}
    ho anche creato due contatori,stavolta..così il valore della seconda lista resta fisso..
    Il problema è che,in una classe di prova in cui applico il metodo,mi riporta "ho trovato un elemento uguale" sia che le stringhe siano uguali sia che siano diverse!!!

    PS:ho usato due if e non un if e un else perchè quest'ultimo mi creava problemi.

  6. #6
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Beh, certo: non è solo in questo caso, il metodo equals ritorna sempre un booleano.

    Allora è come pensavo: puoi tranquillamente rimettere

    codice:
    a.get(i).equals(b.get(j)
    dentro l'if, ma devi togliere il punto e virgola subito dopo, sennò gli stai dicendo:
    "se l'elemento i è uguale all'elemento j NON FARE NULLA e poi stampa SEMPRE la stringa "ho trovato un elemento uguale!!!il nome"+a.get(i)+""+b.get(j)".

    A proposito, la terminazione del ciclo for è i < a.size(), non minore o uguale. Mi sembra strano che funzioni, dovrebbe generarti un errore a runtime

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    47
    funziona!!
    Ti ringrazio!

  8. #8
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Figurati!

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2010
    Messaggi
    47
    Scusa se ti disturbo ancora.....ma oggi ho ampliato il codice...e adesso quello che funzionava non funziona più!!!!
    codice:
    		for(int i=0;i<a.size();i++){
    			stringacontrollo=stringacontrollo.valueOf(a.get(i));
    			System.out.println(stringacontrollo);
    			if(stringacontrollo.endsWith("finericetta")){//Questa condizione ci indica che abbiamo finito di controllare una ricetta
    				System.out.println("fine ricetta!");
    				//aggiungiamo un unità a i,così  iniziaremo a verificare un altra ricetta (condizione presente nel for "i++")
    			}
    			else
    			{
    				
    				//il for ci serve per scorrere la lista (in questo caso la prima "inserita")
    	i=i+1;
    	
    
    				if(a.get(i).equals(b.get(j)))
    				{
    					
    					
    				System.out.println("ho trovato un elemento uguale!!!il nome"+a.get(i)+""+b.get(j));
    				}
    				
    				else{
    					System.out.println("gli elementi sono diversi");
    					i=i-1;
    					j=j+4;
    				}
    			}
    
    			}
    		//fuori dal ciclo for
    	}
    }
    fino ad un certo punto il controllo funzionava..adesso non funziona più e mi dà sempre responso negativo! ("gli elementi sono diversi")
    Grazie ancora,ciao.

  10. #10
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Scusa, non accedo durante il week-end...

    Sei sicuro che è corretta l'istruzione di incremento j = j + 4 ?

    E poi, ora che stai debuggando, ti conviene anche fare una System.out degli elementi che analizzi ad ogni iterazione, così puoi verificare cosa sta venendo confrontato

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.