Implementazione filtro di ricerca

di il
13 risposte

Implementazione filtro di ricerca

Salve a tutti,
ho scritto un programma che deve associare degli alberghi alle stanze in essi disponibili... per fare ciò mi sono servito di una mappa che ha come chiave gli alberghi e come valori una lista concatenata di stanze



Adesso mi serve un filtro di ricerca per cercare le stanze che offrono l'aria condizionata ad un prezzo inferiore a 50€...

In che modo devo implementare il filtro di ricerca?

Ho una classe che definisce la stanza
e una classe che definisce la mappa...

Essendo la struttura principale una mappa
devo implementare il metodo di ricerca all'interno della classe che definisce la mappa ottenendo il keyset della mappa da quale vado, per ogni albergo, a ricavare la lista di stanze da cui ottengo le informazioni richieste?

Ma cosa che non mi è ben chiara perché non trovo sui libri è:
- il metodo per la ricerca, per correttezza, dove va posto?
- il metodo per la ricerca deve restituire i valori come voglio io oppure deve restituire un oggetto?

Mi spiego meglio,
se scorrendo una lista trovo la stanza con le caratteristiche cercate,
posso restituire una stringa contenente le informazioni sulla stanza che poi posso stampare a mio piacimento
oppure
devo restituire l'oggetto cercato da cui, poi, andare a prendere le varie informazioni?

Grazie

13 Risposte

  • Re: Implementazione filtro di ricerca

    antomau96 ha scritto:


    Salve a tutti,
    ho scritto un programma che deve associare degli alberghi alle stanze in essi disponibili... per fare ciò mi sono servito di una mappa che ha come chiave gli alberghi e come valori una lista concatenata di stanze
    Ascolta, non voglio certamente "romperti le uova nel paniere", come si dice ma ..... ti dico cosa avrei fatto io, dovendo fare tutto in memoria e con "strutture dati".

    - Innanzitutto una classe Stanza con i suoi vari dati specifici. La stanza potrebbe anche avere il riferimento al proprio oggetto Albergo.
    - Poi una classe Albergo con i suoi dati specifici E, attenzione, un List<Stanza> . Se le stanze dovessero essere "indicizzate" per un qualche codice o "id", allora si potrebbe tenere anche una mappa, oltre alla lista.
    - Poi una classe es. CollezioneAlberghi che gestisce l'insieme di alberghi. Questa potrebbe contenere un List<Albergo> e (idem come per le stanze) se gli alberghi dovessero essere "indicizzati" per un qualche codice o id, anche una mappa (o più).

    Poi siccome la ricerca di una stanza per un qualche criterio è una operazione "notevole", metterei la logica di ricerca in CollezioneAlberghi ma questa logica NON contiene il concetto specifico del filtro. Il concetto del filtro (se considerare una stanza oppure no) lo astrarrei in una interfaccia es.
    public interface FiltroStanza {
        boolean accettaStanza(Stanza stanza);
    }
    Poi appunto in CollezioneAlberghi ci potrebbe essere un:

    public List<Stanza> trovaStanze(FiltroStanza filtroStanza) {........}

    Il metodo trovaStanze SA come/dove iterare sulle stanze (perché conosce e ha accesso a tutta la struttura dati) ma "non sa" quale è il criterio del filtro. Questo infatti lo sa la implementazione del FiltroStanza.
    Si potrebbe fare quindi una implementazione di FiltroStanza che "accetta" una stanza se ha l'aria condizionata e ad un prezzo inferiore a 50€.

    Tutto questo sarebbe molto lineare, pulito e "object oriented".


    Domanda: ti ho dato qualche indicazione utile ..... o ti ho confuso le idee più di prima?
  • Re: Implementazione filtro di ricerca

    andbin ha scritto:


    - Innanzitutto una classe Stanza con i suoi vari dati specifici. La stanza potrebbe anche avere il riferimento al proprio oggetto Albergo.
    - Poi una classe Albergo con i suoi dati specifici E, attenzione, un List<Stanza> . Se le stanze dovessero essere "indicizzate" per un qualche codice o "id", allora si potrebbe tenere anche una mappa, oltre alla lista.
    - Poi una classe es. CollezioneAlberghi che gestisce l'insieme di alberghi. Questa potrebbe contenere un List<Albergo> e (idem come per le stanze) se gli alberghi dovessero essere "indicizzati" per un qualche codice o id, anche una mappa (o più).
    Ho fatto perfettamente così... Ovviamente ho usato lista/mappa perché ad un codice di albergo corrisponde una serie di stanze avente un codice specifico

    andbin ha scritto:


    Domanda: ti ho dato qualche indicazione utile ..... o ti ho confuso le idee più di prima?
    Non mi hai confuso per niente le idee... l'unica cosa che non mi è chiara è il passaggio del filtro di ricerca al metodo... Se implemento un filtro di ricerca quando poi lo passo al metodo trovaStanze nella classe CollezioneAlberghi
    il metodo filtroStanze non fa altro che verificare che tale stanze esiste? ((perché il metodo restituisce true))... l'unica cosa che non mi è chiara è quel passaggio...
  • Re: Implementazione filtro di ricerca

    antomau96 ha scritto:


    Ho fatto perfettamente così...
    Credo di no .... io non metterei oggetti Albergo come "chiave".
    Ma comunque non è molto importante ora.

    antomau96 ha scritto:


    Non mi hai confuso per niente le idee... l'unica cosa che non mi è chiara è il passaggio del filtro di ricerca al metodo... Se implemento un filtro di ricerca quando poi lo passo al metodo trovaStanze nella classe CollezioneAlberghi
    il metodo filtroStanze non fa altro che verificare che tale stanze esiste? ((perché il metodo restituisce true))... l'unica cosa che non mi è chiara è quel passaggio...
    Il metodo trovaStanze deve solo esaminare tutte le stanze. Se si trova dentro la classe che io ho chiamato CollezioneAlberghi, conosce e ha accesso a tutta la struttura dati, che NON è necessario conoscere dall'esterno (o dal criterio di filtro).

    trovaStanze restituisce un List<Stanza>, quindi chiaramente andrà a istanziare un es. ArrayList<Stanza> che poi restituirà.
    Ma la questione è semplice: per ciascuna stanza, il metodo trovaStanze la inserisce nella lista da restituire solo se il filtro la "accetta". Tutto qui.
  • Re: Implementazione filtro di ricerca

    Ah ecco,
    quindi io implemento il filtro che deve cercare
    hotel < 50€
    passo i dati al filtro che resetituisce true su un determinato oggetto
    ...
    se il metodo restituisce true
    aggiungo la stanza all'arrayList...

    Ho compreso bene?
  • Re: Implementazione filtro di ricerca

    antomau96 ha scritto:


    quindi io implemento il filtro che deve cercare
    hotel < 50€
    passo i dati al filtro che resetituisce true su un determinato oggetto
    Il filtro in realtà può essere molto specializzato, ad esempio come anonymous inner class, oppure potrebbe essere una classe standard magari parametrabile per il prezzo. Dipende da quante volte lo devi usare e se vuoi renderlo ri-utilizzabile o no.

    Se usi Java 8, essendo FiltroStanza concettualmente una "functional interface", la puoi implementare anche con una lambda expression. L'approccio è quindi "funzionale", nel senso che il filtro è un "comportamento" che passi ad un metodo (il trovaStanze).

    antomau96 ha scritto:


    se il metodo restituisce true
    aggiungo la stanza all'arrayList...

    Ho compreso bene?
    Il metodo trovaStanze alla fin fine non fa nulla di particolarmente complesso:

    - crea lista (vuota) da restituire
    - per ciascuna stanza: il filtro la accetta? Sì, la inserisco nella lista
    - restituisce lista

    La logica "per ciascuna stanza" la conosce solo il trovaStanze perché ha accesso alla intera struttura dati. Il punto è che questa logica può anche essere complessa, può anche essere fatta con cicli annidati (se c'è da scansionare alberghi e poi stanze) ma al resto del mondo (e al criterio di filtro) questo non importa.
  • Re: Implementazione filtro di ricerca

    Vediamo se ho capito bene, io fare cosi':
    metodo per la ricerca (param valoreDaCaercare)
    scandisco la lista e prendo una stanza
    chiamo il filtro
    filtro di ricerca (param1 stanza, param2 valoreDaCaercare)
    if (stanza.getPrice()<=50) return true
    ****
    se il metodo ha restituito true aggiungo la stanza all'arrayList...

    Primo problema> vengono fuori tutte le stanze mischiate e io invece voglio che vengano separate per alberghi?? implemento più arrayList? Non credo sia la scelta migliore...

    Ricerca generale:
    Vorrei realizzare una cosa un pò più professionale e avrei pensato anche ad una soluzione ma vorrei un parere:
    Voglio fare in modo che si possano cercare più cose contemporaneamente ma dovrei impostare più filtri...
    es.: passo l'oggetto al filtro tv, al filtro internet e al filtro frigo... se tutti restituiscono true l'oggetto può essere inserito nell'array list...

    ma come faccio a dire al metodo per la ricerca di andare ad interpellare gli specifici filtri....?
    io avrei pensato delle combo box
    se la prima è selezionato aggiungo 1 alla stringa di controllo altrimenti 0
    stessa cosa per gli altri elementi
    alla fine passo la stringa al metodo
    la quale va a testare se char0 è 1 fai questo controllo if (checkStr.charAt(0)....{if (checktv(Stanza) ...} ... se char1 è 1 fai questo controllo... e così via... non so se ho reso l'idea ma sembra una cosa molto macchinosa.... servirebbe solo ad evitare di scrivere tanti metodi di ricerca... i filtri ovviamente restano gli stessi perché devono solo restituire true e false....

    P.S.:
    Nella classe che definisce la stanza io ho già usato questi metodi
    /**
         * @return presenza del frigo bar
         */
        public boolean getFridge()
        {
            return this.fridge;
        }
    
    
        /**
         * @return presenza di una connessione ad internet
         */
        public boolean getInternet()
        {
            return this.internet;
        }
    che dovrebbero ricondurre a

    andbin ha scritto:


    public interface FiltroStanza {
    boolean accettaStanza(Stanza stanza);
    }
    ottenendo direttamente dal metodo la soluzione al problema... è fattibile oppure conviene sempre utilizzare un interfaccia per la ricerca?
  • Re: Implementazione filtro di ricerca

    antomau96 ha scritto:


    Vediamo se ho capito bene, io fare cosi':
    metodo per la ricerca (param valoreDaCaercare)
    scandisco la lista e prendo una stanza
    chiamo il filtro
    filtro di ricerca (param1 stanza, param2 valoreDaCaercare)
    if (stanza.getPrice()<=50) return true
    ****
    se il metodo ha restituito true aggiungo la stanza all'arrayList...
    Ipotizzando uno scenario di ESEMPIO come ho detto prima: CollezioneAlberghi ha un List<Albergo> alberghi e un Albergo ha un List<Stanza>
    Il metodo trovaStanze, fatto senza considerare altro (es. ordinamenti, raggruppamenti ..) potrebbe essere:
    public List<Stanza> trovaStanze(FiltroStanza filtroStanza) {
        List<Stanza> stanzeTrovate = new ArrayList<>();
    
        for (Albergo albergo : alberghi) {
            for (Stanza stanza : albergo.getStanze()) {
                if (filtroStanza.accettaStanza(stanza)) {
                    stanzeTrovate.add(stanza);
                }
            }
        }
    
        return stanzeTrovate;
    }

    antomau96 ha scritto:


    Primo problema> vengono fuori tutte le stanze mischiate e io invece voglio che vengano separate per alberghi??
    Allora devi solo fare "qualcosa" che modella un gruppo di stanze (che NON è un Albergo, essendo potenzialmente un sotto-insieme). Quindi una lista di gruppi di stanze, alla fine.

    Una classe es. GruppoStanze che contiene un List<Stanza> con eventualmente un riferimento al Albergo (se già non c'è l'ha ciascuna Stanza).

    E quindi il trovaStanze darà un List<GruppoStanze>

    antomau96 ha scritto:


    Ricerca generale:
    Vorrei realizzare una cosa un pò più professionale e avrei pensato anche ad una soluzione ma vorrei un parere:
    Voglio fare in modo che si possano cercare più cose contemporaneamente ma dovrei impostare più filtri...
    es.: passo l'oggetto al filtro tv, al filtro internet e al filtro frigo... se tutti restituiscono true l'oggetto può essere inserito nell'array list...

    ma come faccio a dire al metodo per la ricerca di andare ad interpellare gli specifici filtri....?
    Vuol solo dire una implementazione un po' più complessa di FiltroStanza ma non cambia nulla per il resto.

    E' anche possibile fare più implementazioni "fini" dei filtri, ciascuno che considera solo un piccolo aspetto e poi anche un'altra implementazione che dati N filtri, considera la stanza come accettata solo se tutti i sotto-filtri la accettano.
    Il Composite design pattern ti dice nulla ... ?

    antomau96 ha scritto:


    io avrei pensato delle combo box
    A livello "grafico", cosa offri per i filtri è un ALTRO DISCORSO. Non conta ora.

    antomau96 ha scritto:


    ottenendo direttamente dal metodo la soluzione al problema... è fattibile oppure conviene sempre utilizzare un interfaccia per la ricerca?
    La interfaccia di astrazione, se non l'hai capito, serve per SEPARARE due concetti ben diversi:
    - COME ricercare le stanze, conoscendo la struttura dati
    e
    - COME stabilire se considerare una stanza oppure no (questo è il criterio del filtro)
  • Re: Implementazione filtro di ricerca

    andbin ha scritto:



    Allora devi solo fare "qualcosa" che modella un gruppo di stanze (che NON è un Albergo, essendo potenzialmente un sotto-insieme). Quindi una lista di gruppi di stanze, alla fine.

    Una classe es. GruppoStanze che contiene un List<Stanza> con eventualmente un riferimento al Albergo (se già non c'è l'ha ciascuna Stanza).

    E quindi il trovaStanze darà un List<GruppoStanze>
    Allora posso riutilizzare il codice già scritto magari facendo così:
    implemento per la ricerca una ulteriore mappa hotel/lista di stanze
    che invece di contenere tutti i dati contenga solamente i risultati della ricerca?

    andbin ha scritto:


    La interfaccia di astrazione, se non l'hai capito, serve per SEPARARE due concetti ben diversi:
    - COME ricercare le stanze, conoscendo la struttura dati
    e
    - COME stabilire se considerare una stanza oppure no (questo è il criterio del filtro)
    Allora forse ho capito:
    ci sta un'interfaccia che quando viene implementata va a scorrere la struttura prendendo ogni singolo dato
    e poi c'è un filtro che decreta se la stanza deve essere presa o meno...
    corretto?

    Però da quello che ho capito la prof sostiene che il filtro di ricerca debba essere definito nella classe dell'oggetto ergo non posso fare
    public class myFilter
    {
    	public boolean tvfilter(Stanza s)
    	{
    		if (s.tv==true) return true;
    		return false;
    	}
    
    }

    andbin ha scritto:


    un'altra implementazione che dati N filtri, considera la stanza come accettata solo se tutti i sotto-filtri la accettano
    Per la ricerca mutlipla avevo pensato proprio questa soluzione ma per far si che il metodo vada a selezionare quali filtri deve usare va bene il passargli una stringa di 0 e 1
    dove 0 vuol dire filtro escluso
    e 1 filtro incluso
    e magari i vari dati 0 e 1 siano in un ordine ben preciso in modo che il primo carattere indica filtro tv, il secondo filtro aria, il terzo filtro frigo e il quato frigo internet?

    Quello che avevo pensato era:
    combobox1 => srringa ricerca + 1 //altrimenti 0
    etc....
    in modo dale che in base ai combo selezionati vinene fuoria questa stringa di ricerca di 0 e 1....
    Es. passo al metodo di ricerca
    1010
    e lui deve quindi cercare tutte le stanze che hanno tv e frigo...
  • Re: Implementazione filtro di ricerca

    antomau96 ha scritto:


    Allora posso riutilizzare il codice già scritto magari facendo così:
    implemento per la ricerca una ulteriore mappa hotel/lista di stanze
    che invece di contenere tutti i dati contenga solamente i risultati della ricerca?
    Ma che c'entra un'altra mappa??

    antomau96 ha scritto:


    Allora forse ho capito:
    ci sta un'interfaccia che quando viene implementata va a scorrere la struttura prendendo ogni singolo dato
    e poi c'è un filtro che decreta se la stanza deve essere presa o meno...
    corretto?
    No. La implementazione della interfaccia di astrazione del filtro di stanze non "scorre" un bel niente di per sé.

    antomau96 ha scritto:


    Però da quello che ho capito la prof sostiene che il filtro di ricerca debba essere definito nella classe dell'oggetto ergo non posso fare
    public class myFilter
    {
    	public boolean tvfilter(Stanza s)
    	{
    		if (s.tv==true) return true;
    		return false;
    	}
    
    }

    antomau96 ha scritto:


    Per la ricerca mutlipla avevo pensato proprio questa soluzione ma per far si che il metodo vada a selezionare quali filtri deve usare va bene il passargli una stringa di 0 e 1
    dove 0 vuol dire filtro escluso
    e 1 filtro incluso
    e magari i vari dati 0 e 1 siano in un ordine ben preciso in modo che il primo carattere indica filtro tv, il secondo filtro aria, il terzo filtro frigo e il quato frigo internet?

    Quello che avevo pensato era:
    combobox1 => srringa ricerca + 1 //altrimenti 0
    etc....
    in modo dale che in base ai combo selezionati vinene fuoria questa stringa di ricerca di 0 e 1....
    Es. passo al metodo di ricerca
    1010
    e lui deve quindi cercare tutte le stanze che hanno tv e frigo...
  • Re: Implementazione filtro di ricerca

    F30

    metodo di ricerca
    
    public XXXXXXXXX finder(boolean price, int price, boolean tv, boolean fridge...)
    {
    	ArrayList... x //creo arrayList
    	for (Stanza s : map) //scorro la mappa (ovviamente non in questo modo)
    	{
    	
    		if (price)
    		{
    			if (priceFilter(s, price))
    			{
    				if (tv)
    				{
    					if (tvFilter(s))
    					{
    						x.add(room); //aggiungo dato all'arrayList
    					}
    				}
    			}
    		}
    		
    	}
    }
    
    in modo che viene aggiunto il dato solo se tutti i filtri sono veri... solo che in questo modo non posso stare a creare le varie combinazioni possibili di filtri... allora mi serve un qualcosa di generico che vada a usare i filtri e ho pensato a
    
    public ArrayList<> ricerca()
    {
    
    	ArrayList..... //definisco array list
    	
    	//scorro la lista
    	{
    		int found = 1;
    		if (price)
    		{
    			if(priceFilter(s, price)) found*=1;
    			else found*=0;
    		}
    		
    		if (tv)
    		{
    			if (tvFilter(s)) found*=1;
    			else found*=0;
    		}
    		
    		//altre chiamate ai filtri....
    		
    		if(found==1) array.add();
    	}
    }
    
    se tutti i metodi restituiscono true found=1 altrimenti sarà 0 perché si sa che 0*1=0....
    Non credo sia la migliore implementazione ma almeno rende l'idea

    filtro prezzo
    
    public boolean pricefilter(Stanza s, int price)
    {
    	if (s.getPrice()==price) return true;
    	return false;
    }
    
    tv
    
    public boolean tvfilter(Stanza s)
    {
    	return s.getTv();
    }
    
    //altri filtri di ricerca....

  • Re: Implementazione filtro di ricerca

    Questo è quello che ho fatto adesso e funziona
    
    public ArrayList<MyRoom> finder(int price)
        {
            ArrayList<MyRoom> results = new ArrayList<MyRoom>();
    
            //ottenere il keyset della mappa
            Set<MyHotel> mySet = getSet();
    
            //esplorare il set per ottenere la lista delle stanze per ogni hotel
            for (MyHotel hh : mySet)
            {
                //ottengo la lista delle stanze corrispondenti all'hotel hh
                RoomsList rr = theMap.get(hh);
    
                //scorrere la lista a caccia dei dati delle singole stanze
                //ottengo un iteratore per la lista
                RoomsListIterator myIterator = rr.listIterator();
    
                while (myIterator.hasNext()) //fintanto che l'iteratore rileva un'ulteriore nodo nella lista
                {
    
                    MyRoom currentRoom = myIterator.next();
    
                    if (currentRoom.getPrice() <= price) results.add(currentRoom);
    
                }
    
    
            }
    
            System.out.println(results.toString()); //debug
            return results;
        }
    

    Il problema è che stampa le stanze senza alcun riferimento all'hotel!

    Almeno questo va bene?
  • Re: Implementazione filtro di ricerca

    Il mio metodo di ricerca e' questo e funziona perfettamente
    
    public ArrayList<MyRoom> finder(boolean findprice, int price, boolean findtv, boolean findair, boolean findfridge, boolean findnet)
        {
            ArrayList<MyRoom> results = new ArrayList<MyRoom>();
    
            //ottenere il keyset della mappa
            Set<MyHotel> mySet = getSet();
    
            //esplorare il set per ottenere la lista delle stanze per ogni hotel
            for (MyHotel hh : mySet)
            {
                //ottengo la lista delle stanze corrispondenti all'hotel hh
                RoomsList rr = theMap.get(hh);
    
                //scorrere la lista a caccia dei dati delle singole stanze
                //ottengo un iteratore per la lista
                RoomsListIterator myIterator = rr.listIterator();
    
                while (myIterator.hasNext()) //fintanto che l'iteratore rileva un'ulteriore nodo nella lista
                {
    
                    MyRoom currentRoom = myIterator.next();
    
                    int found = 1; //1 if found or 0 if not found
                    /*
                    si sfrutta la moltiplicazione di 0 e 1
                    la variabile trovato inizialmente e' 1
                    se la stanza corrente corrsiponde a quella cercata il moltiplicatore viene moltiplicato * 1 > ergo il risultato non cambia
                    se invece la stanza corrente non rispecchia i criteri di ricerca il moltiplicatore viene moltiplicato * 0 > ergo il risultato rimarra' per sempre 0 perche'
                    1*1=1 trovato
                    1*0=0 non trovato
                    0*1=0 trovato
                    in tale modo la vriabile sara' 1 solo se tutti gli elementi sono stati trovati
                     */
    
    
    
                    if (findprice)
                    {
                        if (currentRoom.getPrice() <= price) found*=1;
                        else found*=0;
                    }
    
                    if (findtv)
                    {
                        if (currentRoom.getTv()) found*=1;
                        else found*=0;
                    }
    
                    if (findair)
                    {
                        if (currentRoom.getAirConditioner()) found*=1;
                        else found*=0;
                    }
    
                    if (findfridge)
                    {
                        if (currentRoom.getFridge()) found*=1;
                        else found*=0;
                    }
    
                    if (findnet)
                    {
                        if (currentRoom.getInternet()) found*=1;
                        else found*=0;
                    }
    
    
                    if (found==1) results.add(currentRoom); //se il risultato della ricerca e' 1 aggiungo la stanza corrente all'arraylist
    
    
                }
    
    
            }
    
            System.out.println(results.toString()); //debug
            return results;
        }
    
    unico poblema: non riesco ad associare l'hotel alla stanza...
  • Re: Implementazione filtro di ricerca

    Questo e' quello che sono riuscito ad implementare:

    Metodo per la ricerca
    
        public ArrayList<FinderObj> finder(boolean findprice, int price, boolean findtv, boolean findair, boolean findfridge, boolean findnet)
        {
            ArrayList<FinderObj> results = new ArrayList<FinderObj>();
    
            //ottenere il keyset della mappa
            Set<MyHotel> mySet = getSet();
    
            //esplorare il set per ottenere la lista delle stanze per ogni hotel
            for (MyHotel hh : mySet)
            {
                //ottengo la lista delle stanze corrispondenti all'hotel hh
                RoomsList rr = theMap.get(hh);
    
                //scorrere la lista a caccia dei dati delle singole stanze
                //ottengo un iteratore per la lista
                RoomsListIterator myIterator = rr.listIterator();
    
                while (myIterator.hasNext()) //fintanto che l'iteratore rileva un'ulteriore nodo nella lista
                {
    
                    MyRoom currentRoom = myIterator.next();
    
                    int found = 1; //1 if found or 0 if not found
                    /*
                    si sfrutta la moltiplicazione di 0 e 1
                    la variabile trovato inizialmente e' 1
                    se la stanza corrente corrsiponde a quella cercata il moltiplicatore viene moltiplicato * 1 > ergo il risultato non cambia
                    se invece la stanza corrente non rispecchia i criteri di ricerca il moltiplicatore viene moltiplicato * 0 > ergo il risultato rimarra' per sempre 0 perche'
                    1*1=1 trovato
                    1*0=0 non trovato
                    0*1=0 trovato
                    in tale modo la vriabile sara' 1 solo se tutti gli elementi sono stati trovati
                     */
    
    
    
                    if (findprice)
                    {
                        if (currentRoom.getPrice() <= price) found*=1;
                        else found*=0;
                    }
    
                    if (findtv)
                    {
                        if (currentRoom.getTv()) found*=1;
                        else found*=0;
                    }
    
                    if (findair)
                    {
                        if (currentRoom.getAirConditioner()) found*=1;
                        else found*=0;
                    }
    
                    if (findfridge)
                    {
                        if (currentRoom.getFridge()) found*=1;
                        else found*=0;
                    }
    
                    if (findnet)
                    {
                        if (currentRoom.getInternet()) found*=1;
                        else found*=0;
                    }
    
    
                    if (found==1)
                    {
                        FinderObj foundElement = new FinderObj(hh, currentRoom);
    
                        results.add(foundElement); //se il risultato della ricerca e' 1 aggiungo la stanza corrente all'arraylist
                    }
    
    
                }
    
    
            }
    
            System.out.println(results.toString()); //debug
    
            return results;
        }
    
    Metodo per la stampa dei valori cercati dal metodo
    
    
        public String findPrintResults(boolean findprice, int price, boolean findtv, boolean findair, boolean findfridge, boolean findnet)
        {
    
            ArrayList<FinderObj> results = finder(findprice, price, findtv, findair, findfridge, findnet);
    
            String stringResults = "";
    
            stringResults += "<html><table border\1\">";
    
            stringResults += "<tr><th>Room type</td><td>Available rooms</td><td>Price</td><td>TV</td><td>airCond</td><td>Fridge</td><td>Internet</td></tr>";
    
    
    
            //inserisco i risultati della ricerca in una stringa che formatta una tabella in html da impostare come argomento di una jlabel
            for (FinderObj fo : results)
            {
                MyRoom mr = fo.getRoom();
    
                stringResults += "<tr><td><b>Hotel:</b></td><td colspan=\"6\">" + fo.getHotel().getSerial() + "    " + fo.getHotel().getName() + "</td></tr>";
    
                stringResults += "<tr><td>" + mr.getType() + "</td><td>" + mr.getNum() + "</td><td>" + mr.getPrice() + "</td><td>" + mr.getTv() + "</td><td>" + mr.getAirConditioner() + "</td><td>" + mr.getFridge() + "</td><td>" + mr.getInternet() + "</td></tr>";
    
            }
    
    
            stringResults += "</table></html>";
    
            return stringResults;
        }
    
    Questo è il risultato ottenuto:


    È il massimo che sono riuscito a fare con le competenze e il materiale che ho a disposizione... Tutti i consigli per migliorare questa @!#@!#( ) ricerca sono ben accetti
Devi accedere o registrarti per scrivere nel forum
13 risposte