Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [JAVA] Comparare l'indirizzo di memoria di due stringhe

    Ho due array di oggetti che, in ogni posizione, contengono delle coppie di valori (una stringa e un intero).
    Mi serve un metodo che confronti non se i valori di stringa e intero sono uguali, ma se in ogni posizione i due array contengono esattamente la stessa coppia. Devo confrontare gli indirizzi, giusto?Tralascio i controlli sulla lunghezza e il resto, potreste dirmi se la condizione è corretta?A me sembra di sì, ma non funziona

    -array è dello stesso tipo di vettore 2, è dichiarato nella classe in cui è definito questo metodo
    -stringa è dichiarato public e quindi non ho usato nessun metodo get();

    codice:
    public boolean confronta(Array vettore2){
    
    if(array[i].stringa==(vettore2.array[i].stringa)&&array[i].getNumero()==vettore2.array[i].getNumero())
    				return true;
    }
    Confronto gli indirizzi della stringa e poi che gli interi abbiano lo stesso valore, giusto? Visto che gli interi vengono copiati...o devo confrontare direttamente l'elemento dell'array?

    Grazie in anticipo

  2. #2
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    71
    Controlla questo post [Java] Confronti: qualcuno capisce perchè falliscono?, il problema è simile al tuo.
    Comunque quando confronti due stringhe devi utilizzare il metodo equals non == (nel post indicato è spiegato tutto per bene).

    In pratica devi scrivere:
    codice:
    if(array[i].stringa.equals(vettore2.array[i].stringa) && 
    array[i].getNumero()==vettore2.array[i].getNumero()){
    				return true;
    }

  3. #3
    Originariamente inviato da hoyer
    Controlla questo post [Java] Confronti: qualcuno capisce perchè falliscono?, il problema è simile al tuo.
    Comunque quando confronti due stringhe devi utilizzare il metodo equals non == (nel post indicato è spiegato tutto per bene).

    In pratica devi scrivere:
    codice:
    if(array[i].stringa.equals(vettore2.array[i].stringa) && 
    array[i].getNumero()==vettore2.array[i].getNumero()){
    				return true;
    }
    Ma con equals io confronto che le stringhe contengano gli stessi valori, mentre io voglio controllare che i due array puntino allo stesso oggetto (e che quindi contengano la stessa stringa e lo stesso numero)... mi sono spiegato male

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    71
    Avevo letto male.
    Prima di tutto un dubbio, sei sicuro divole controllare se le due reference (array e vettore2) puntino allo stesso oggetto? Tieni presente che in questo caso avresti falso anche se i due oggetti a cui puntano pur avendo gli stessi valori sono diversi (come il confronto tra stringhe); in questo caso ti basterebbe fare
    codice:
    if(array == vettore2){
      return true;
    }
    Secondo me, ma poi devi vedere bene la tua applicazione conviene implementarti un metodo (come hai fatto tu) e farti un ciclo che confrotna gli oggetti posizione per posizione), così:
    codice:
    public boolean confronta(Array vettore2){
    //scorri i due array elemento per elemento
      for(int ciclo1 = 0;ciclo1 < array.length;ciclo1++){
        for(int ciclo2 = 0;ciclo2 < array[ciclo1].length;ciclo2++){
          if(!array[i].stringa.equals(vettore2.array[i].stringa) || 
          array[i].getNumero()!=vettore2.array[i].getNumero()){
    //appena trovi un elemento che non coincide blocchi tutto e ritorni false
            return false;
          }
        }
      }
      return true;
    }
    Spero di essere stato chiaro e di aver azzeccato la risposta.

  5. #5
    Grazie, ci sono riuscito!

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.