Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177

    [java]arraylist e contains()

    Ciao ho un problema: ho un un arraylist che contiene diversi ogetti...ora voglio verificare la presenza o meno di una stringa:
    ridefinisco equals():
    codice:
    class Test{
    String f;
    Test(String d){
    this.f=d;
    }
    public boolean equals (Object x) {
        boolean g=false;
        if(x instanceof Test){
            return true;
        }
        Test p = (Test) x;
        return p.f.equals(this.f);
       }
    }

    codice:
    import java.util.*;
    class Prova{
    ArrayList<Test>a;
    String s;
    Prova(String t){
    this.s=t;
    a=new ArrayList<Test>();
    }
    public int getNumstringa(String u){
        Test x=new Test(u);
        int count=0;
            if(a.contains(x)){
            count++;
        }
    return count;
    }
    public static void main(String args[]){
        Test i=new Test("ok");
        Prova u=new Prova("bbbb");
        System.out.println(u.getNumstringa("ok"));
    }
    }
    Contains dovrebbe confrontare oggetti equals..giusto?Perchè il compilatore mi stampa sempre 0?
    Ultima modifica di el92; 28-05-2015 a 14:30

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da el92 Visualizza il messaggio
    ridefinisco equals():
    codice:
    public boolean equals (Object x) {
        boolean g=false;
        if(x instanceof Test){
            return true;
        }
        Test p = (Test) x;
        return p.f.equals(this.f);
       }
    }
    No, questo è sbagliato. Se il test con instanceof fallisce (false) puoi restituire subito false. Ma se è true devi continuare, non restituire true!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Poi non si capisce a che ti serve la variabile "g"... che non viene né usata, né restituita.


    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

  4. #4
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    ciao ho riscritto il metodo equals(Object):

    codice:
    public boolean equals (Object x) {
        boolean g=false;
        if(x instanceof Testttt && x!=null){
            Testttt p = (Testttt) x;
            g=p.f==(this.f);
        }
        return g;
       }
    adesso dovrebbe confronate se i due oggetti sono equals...perchè non viene?

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Se "f" è una stringa no... gli oggetti (e String è un oggetto) non si confrontano con l'operatore ==, ma appunto con il metodo equals().
    (A meno che le tue intenzioni non siano diverse e cioè verificare che il reference sia proprio lo stesso).

    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

  6. #6
    Utente di HTML.it L'avatar di el92
    Registrato dal
    Dec 2014
    Messaggi
    177
    Ciao grazie 1000 per le risposte viene tutto

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.