[java]controllare se un vector contiene doppioni

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
misterxxitalia
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 838
Iscrizione: domenica 11 marzo 2007, 22:15

[java]controllare se un vector contiene doppioni

Messaggio da misterxxitalia »

ciao a tutti ho un bel problema...devo controllare se un vector contiene doppioni.chi ha idee su come fare??questo è il metodo per aggiungere che uso..

Codice: Seleziona tutto

 public void addNominativo (Rubrica n)
    {
        nominativi.add(n);
    }
esempio di cosa devo aggiungere...

Codice: Seleziona tutto

Rubrica x = new Rubrica (mionome,miocognome,miorecapito,miotelefono,affinitascelta);
per favore aiutatemi!!
Avatar utente
ElFranxo
Prode Principiante
Messaggi: 164
Iscrizione: sabato 20 ottobre 2007, 16:52
Località: Bologna

Re: [java]controllare se un vector contiene doppioni

Messaggio da ElFranxo »

crea un metodo che confronti i campi dell'oggetto Rubrica prima di inserirlo con tutti gli altri elementi del vettore.
Credo sia più semplice gestirla così sennò ti tocca ciclare su tutti gli elementi ogni volta che inserisci un oggetto.

Oppure provare con il metodo contains() della classe Vector
Magari funzia ma non ricordo bene come agisca, se per riferimento o per valore.

Altrimenti semplicemente puoi fare:

Codice: Seleziona tutto

public void addNominativo(Rubrica n)
{
      for(int i=0;i < nominativi.size();i++)
     { 
           if(nominativi.get(i).mionome.equals(n.mionome) && etc etc...)
          {
              System.out.println("Esiste già"); // o magari lanci un'Exception senza stato d'uscita
              continue;
           }
           else nominativi.add(n);
      }
}

Non ho compilato nè provato chiaramente, è solo una bozza.
"...no Windows or Gates needed, in a free World..."
misterxxitalia
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 838
Iscrizione: domenica 11 marzo 2007, 22:15

Re: [java]controllare se un vector contiene doppioni

Messaggio da misterxxitalia »

scusa ma esempio qui...

Codice: Seleziona tutto

Rubrica x = new Rubrica (mionome,miocognome,miorecapito,miotelefono,affinitascelta);
x è un insieme di stringhe...quindi qui...

Codice: Seleziona tutto

public void addNominativo(Rubrica n)
{
      for(int i=0;i < nominativi.size();i++)
     { 
           if(nominativi.get(i)qui come la semplifico??)
          {
              System.out.println("Esiste già"); // o magari lanci un'Exception senza stato d'uscita
              continue;
           }
           else nominativi.add(n);
      }
}
te lo chiedo perche io ho un input anche da file xml dove non ho mionome miocognome ecc..
ovvero posso usare il metodo compare per comparare un insieme di stringhe??
Ultima modifica di misterxxitalia il martedì 4 marzo 2008, 21:30, modificato 1 volta in totale.
Avatar utente
ElFranxo
Prode Principiante
Messaggi: 164
Iscrizione: sabato 20 ottobre 2007, 16:52
Località: Bologna

Re: [java]controllare se un vector contiene doppioni

Messaggio da ElFranxo »

Aspetta fammi capire, prendi delle stringhe da XML e componi una entry nella rubrica?

Per semplificare i controlli stringa a stringa con la compare devi modificare la compareTo che altrimenti si comporta di default e sicuramente non ha il comportamento di paragone, ma quello di restituire qualcosa che permetta un ordinamento, che non è il comportamento che desideri.

Per semplificare puoi provare con

i

Codice: Seleziona tutto

f(nominativi.get(i).equals(n)) // ma la vedo dura

oppure con 

if(nominativi.contains(n)) 
se va con uno dei due sei a cavallo, altrimenti ti tocca esaminare campo per campo...è l'unico modo.
"...no Windows or Gates needed, in a free World..."
misterxxitalia
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 838
Iscrizione: domenica 11 marzo 2007, 22:15

Re: [java]controllare se un vector contiene doppioni

Messaggio da misterxxitalia »

si prendo delle stringhe xml ma nn cambia nulla xo...

Codice: Seleziona tutto

{
    Element nominativo = (Element)iterator.next();
 Rubrica b = new Rubrica (""+nominativo.getChild("nome").getTextTrim(),""+nominativo.getChild("cognome").getTextTrim(),""+nominativo.getChild("indirizzo").getTextTrim(),""+nominativo.getChild("telefono").getTextTrim(),""+nominativo.getChild("affinita").getTextTrim());
  //r.addNominativo(b);
    
      for(int i=0;i < r.getnominativi().size();i++)
     { 
           if(r.getnominativi().get(i).equals(b))
          {
              System.out.println("Esiste già"); // o magari lanci un'Exception senza stato d'uscita
              continue;
           }
           else r.addNominativo(b);
      }
    
    
   
cosi nn da errore ma credo che nn carica nulla... (mad)
Avatar utente
ElFranxo
Prode Principiante
Messaggi: 164
Iscrizione: sabato 20 ottobre 2007, 16:52
Località: Bologna

Re: [java]controllare se un vector contiene doppioni

Messaggio da ElFranxo »

vai con la contains sennò devi farlo campo per campo  ;)
"...no Windows or Gates needed, in a free World..."
misterxxitalia
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 838
Iscrizione: domenica 11 marzo 2007, 22:15

Re: [java]controllare se un vector contiene doppioni

Messaggio da misterxxitalia »

guarda ho provato cosi:

Codice: Seleziona tutto

 Element nominativo = (Element)iterator.next();
 Rubrica b = new Rubrica (""+nominativo.getChild("nome").getTextTrim(),""+nominativo.getChild("cognome").getTextTrim(),""+nominativo.getChild("indirizzo").getTextTrim(),""+nominativo.getChild("telefono").getTextTrim(),""+nominativo.getChild("affinita").getTextTrim());
  //r.addNominativo(b);
  if (!(r.getnominativi().contains(b)))r.addNominativo(b);  
  else System.out.println("errore elementi doppione");
      
cosi carica tutto in vettore ma carica anche i doppioni....che sbaglio??
Avatar utente
ElFranxo
Prode Principiante
Messaggi: 164
Iscrizione: sabato 20 ottobre 2007, 16:52
Località: Bologna

Re: [java]controllare se un vector contiene doppioni

Messaggio da ElFranxo »

per lui non esistono doppioni perchè ogni istanza di rubrica in realtà rappresenta un'istanza a sè...
devi controllare campo per campo..è un po' più oneroso però così va sicuro...
Se vuoi farla ordinata crea un metodo che effettua il controllo e poi invoca quello nel blocco d'interesse.
"...no Windows or Gates needed, in a free World..."
misterxxitalia
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 838
Iscrizione: domenica 11 marzo 2007, 22:15

Re: [java]controllare se un vector contiene doppioni

Messaggio da misterxxitalia »

scusa mi fai un esempio?nn ho piu idee... ::)
Avatar utente
ElFranxo
Prode Principiante
Messaggi: 164
Iscrizione: sabato 20 ottobre 2007, 16:52
Località: Bologna

Re: [java]controllare se un vector contiene doppioni

Messaggio da ElFranxo »

la storia del campo per campo è quella di prima

if( mionome.equals(n.mionome) && etc etc etc)
"...no Windows or Gates needed, in a free World..."
misterxxitalia
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 838
Iscrizione: domenica 11 marzo 2007, 22:15

Re: [java]controllare se un vector contiene doppioni

Messaggio da misterxxitalia »

sono sulla buona strada??

Codice: Seleziona tutto

  Element nominativo = (Element)iterator.next();
 Rubrica b = new Rubrica (""+nominativo.getChild("nome").getTextTrim(),""+nominativo.getChild("cognome").getTextTrim(),""+nominativo.getChild("indirizzo").getTextTrim(),""+nominativo.getChild("telefono").getTextTrim(),""+nominativo.getChild("affinita").getTextTrim());
  r.addNominativo(b);
  for(int i=0;i < nominativi.size();i++)
     { 
           if(r.getnominativi().get(i).""+nominativo.getChild("nome").getTextTrim().equals(r.getNome())/* && etc etc...*/)
          {
              System.out.println("Esiste già"); // o magari lanci un'Exception senza stato d'uscita
              continue;
           }
           else nominativi.add(n);
      }
   
Avatar utente
ElFranxo
Prode Principiante
Messaggi: 164
Iscrizione: sabato 20 ottobre 2007, 16:52
Località: Bologna

Re: [java]controllare se un vector contiene doppioni

Messaggio da ElFranxo »

Ricorda di mettere tutto in AND [&&]
per il resto va bene
ti consiglio una formula del tipo :

Codice: Seleziona tutto

Element nominativo = (Element)iterator.next();
String nome = ""+nominativo.getChild("nome").getTextTrim();
String cognome = ""+nominativo.getChild("cognome").getTextTrim();
String indirizzo = nominativo.getChild("indirizzo").getTextTrim();
String telefono = ""+nominativo.getChild("telefono").getTextTrim();
String affinita = ""+nominativo.getChild("affinita").getTextTrim();
Rubrica b = new Rubrica(nome,cognome,indirizzo,telefono,affinita);
boolean exists = false;

  for(int i=0;i < nominativi.size();i++)
     { 
           if(r.getnominativi().get(i).getNome().equals(b.getNome())/* && etc etc...*/)
          {
              System.out.println("Esiste già"); 
              exists = true;
              continue;
           }
      }
       if(!exists)  r.addNominativo(b);
   
E' molto più ordinata anche se rozza, ma per come hai strutturato il tutto mi pare la cosa più lineare.
Il boolean exists ti serve per tener conto della presenza di un doppione e in caso di exists = false aggiunge il nominativo.
Cerca sempre di usare metodi set e get per recuperare e settare campi privati degli oggetti mi raccomando.
Ultima modifica di ElFranxo il martedì 4 marzo 2008, 23:39, modificato 1 volta in totale.
"...no Windows or Gates needed, in a free World..."
misterxxitalia
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 838
Iscrizione: domenica 11 marzo 2007, 22:15

Re: [java]controllare se un vector contiene doppioni

Messaggio da misterxxitalia »

scusa forse vorresti dire questo...

Codice: Seleziona tutto

 Element nominativo = (Element)iterator.next();
 String nome = ""+nominativo.getChild("nome").getTextTrim();
String cognome = ""+nominativo.getChild("cognome").getTextTrim();
String indirizzo = nominativo.getChild("indirizzo").getTextTrim();
String telefono = ""+nominativo.getChild("telefono").getTextTrim();
String affinita = ""+nominativo.getChild("affinita").getTextTrim();
Rubrica b = new Rubrica(nome,cognome,indirizzo,telefono,affinita);
  r.addNominativo(b);
  for(int i=0;i < r.getnominativi().size();i++)
     { 
           if(r.getnominativi().get(i)r.getNome().equals(r.nome) && r.getCognome().equals(r.cognome)&&r.getIndirizzo().equals(r.indirizzo)&&r.getTelefono().equals(r.telefono)r.getAffinita().equals(r.affinita))
          {
              System.out.println("Esiste già"); // o magari lanci un'Exception senza stato d'uscita
              continue;
           }
           else nominativi.add(n);
      }
   
   
xo nn capisco cosa sbaglio mi dice sull'if expected...
Avatar utente
ElFranxo
Prode Principiante
Messaggi: 164
Iscrizione: sabato 20 ottobre 2007, 16:52
Località: Bologna

Re: [java]controllare se un vector contiene doppioni

Messaggio da ElFranxo »

No no..
Allora tu crei un oggetto rubrica e verifichi che non sia già presente.
Per verificare come fai?
Prendi tutto l'elenco dei nominativi, che non ho idea di come tu l'abbia chiamato, penso r, e verifichi che non ci sia b..
se non esiste b allora fai elenconomi.add(b);
Il tuo codice controlla r con sè stesso!!!

Quando fai r.getNome().equals(r.nome) stai controllando le stesse cose!!!
Devi fare r.getNome().equals(b.nome), chiaro?
"...no Windows or Gates needed, in a free World..."
misterxxitalia
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 838
Iscrizione: domenica 11 marzo 2007, 22:15

Re: [java]controllare se un vector contiene doppioni

Messaggio da misterxxitalia »

ora ti ho capito...prendi il nome del vettore e lo confronti col nome che devo aggiungere....giusto?

Codice: Seleziona tutto

if(r.getnominativi().get(i)r.getNome().equals(b.nome) && r.getCognome().equals(b.cognome)&&r.getIndirizzo().equals(b.indirizzo)&&r.getTelefono().equals(b.telefono)r.getAffinita().equals(b.affinita))
ma cosa sbaglio in questo if??dice che manca qualche cosa...scusa ma sto dando i numeri... ::)
Avatar utente
ElFranxo
Prode Principiante
Messaggi: 164
Iscrizione: sabato 20 ottobre 2007, 16:52
Località: Bologna

Re: [java]controllare se un vector contiene doppioni

Messaggio da ElFranxo »

Codice: Seleziona tutto

if(r.getnominativi().get(i)r.getNome().equals(b.nome) && r.getCognome().equals(b.cognome)&&r.getIndirizzo().equals(b.indirizzo)&&r.getTelefono().equals(b.telefono) /*MANCAVANO && */ && r.getAffinita().equals(b.affinita))
"...no Windows or Gates needed, in a free World..."
Avatar utente
IppatsuMan
Prode Principiante
Messaggi: 199
Iscrizione: mercoledì 14 febbraio 2007, 1:31
Contatti:

Re: [java]controllare se un vector contiene doppioni

Messaggio da IppatsuMan »

Sarebbe un po' più lineare (e corretto) fare l'override del metodo equals() della classe Rubrica (ereditato da Object), in modo che si occupi di fare tutti i controlli su nome, cognome e così via. In questo modo puoi utilizzare (ad esempio) il metodo contains della classe Vector (che usa il metodo equals() della classe contenuta). Una possibile alternativa è utilizzare una classe che implementi l'interfaccia Map (http://java.sun.com/javase/6/docs/api/java/util/Map.html), che ha prestazioni ottime quando si tratta di determinare se un elemento è già presente al suo interno.
ハッカー
misterxxitalia
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 838
Iscrizione: domenica 11 marzo 2007, 22:15

Re: [java]controllare se un vector contiene doppioni

Messaggio da misterxxitalia »

scusa elfranco se ti scrivo ora..mi da sempre errore...forse è un problema di come pongo l'if??ippatsu puoi fare un esempio?vi ringrazio dell'aiuto che mi date...
Avatar utente
ElFranxo
Prode Principiante
Messaggi: 164
Iscrizione: sabato 20 ottobre 2007, 16:52
Località: Bologna

Re: [java]controllare se un vector contiene doppioni

Messaggio da ElFranxo »

Ippatsu l'override è non dico complesso, però da fare con attenzione, praticamente è lineare a livello logico, però lo vedo un po' un passo "importante" per l'utente che parrebbe alle prime armi con JAVA e confronti tra Vector. Proviamo magari a fargli andare la cosa in maniera semplicistica per poi indirizzarlo verso la correttezza non solo sintattica ma anche semantica? Almeno il passo logico è chiaro da subito e va riadattato a ciò che è previsto per confronti e contenimenti.

Mister, Che errore ti dà? Prova a postare quello che ti restituisce la compilazione e le righe corrispondenti dell'errore.
"...no Windows or Gates needed, in a free World..."
misterxxitalia
Scoppiettante Seguace
Scoppiettante Seguace
Messaggi: 838
Iscrizione: domenica 11 marzo 2007, 22:15

Re: [java]controllare se un vector contiene doppioni

Messaggio da misterxxitalia »

elfranco grazie di tutto ho riscrito il metodo equals e ho risolto....grazie lo stesso!!
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: Google [Bot] e 4 ospiti