Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2014
    Messaggi
    15

    Problema con un esercizio gestione scaffale

    Salve, devo fare un programma che simula uno scaffale composto da vari ripiani.
    Deve essere possibile inserire un libro nel primo scaffale abbastanza libero da contenerlo, rimuovere un libro ed avere in output da dove è stato tolto, cercare un libro e vedere dov'è. Ho però dei problemi con la ricerca e la rimozione (non funzionano).
    Nella classe ripiano le due funzioni le ho fatte cosi:

    codice:
    public int cerca(String titolo)
        {
            Iterator<Pubblicazione> it=contenuto.iterator();
            while(it.hasNext())
            {
                Pubblicazione tmp=it.next();
                if(titolo.equals(tmp.getTitolo()))
                {
                    return contenuto.indexOf(tmp);
                }
            }
            return -1;
        }
    
    
        public int rimuovi(String titolo)
        {
            for(int i=0;i<contenuto.size();i++)
            {
                Pubblicazione pubblicazione=contenuto.get(i);
                if(titolo.equals(pubblicazione.getTitolo()))
                {
                    contenuto.remove(i);
                    this.spazioDisponibile=+pubblicazione.getSpessore();
                    return i;
                }
            }
            return -1;
        }

    in quella scaffale cosi:

    codice:
    public Posizione cerca(String titolo)
        {
            for(int i=0;i<numRipiani;i++)
            {
                int j=this.contenuto[i].cerca(titolo);
                if(j!=-1)
                {
                    return new Posizione(i,j);
                }
            }
            return null;
        }
    
    
        public Posizione rimuovi(String titolo)
        {
            for(int i=0;i<contenuto.length;i++)
            {
                int j=contenuto[i].rimuovi(titolo);
                if(j!=-1)
                {
                    return new Posizione(i,j);
                }
            }
            return null;
        }

    dove Posizione ha due variabile, una per il numero di ripiano, una per il numero di pubblicazione.

    C'è qualcosa che non va??
    Ultima modifica di LeleFT; 02-01-2015 a 10:30 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Quote Originariamente inviata da andy_ Visualizza il messaggio
    codice:
    public int cerca(String titolo)
        {
            Iterator<Pubblicazione> it=contenuto.iterator();
            while(it.hasNext())
            {
                Pubblicazione tmp=it.next();
                if(titolo.equals(tmp.getTitolo()))
                {
                    return contenuto.indexOf(tmp);
                }
            }
            return -1;
        }
    Innanzitutto scorrere gli elementi e poi, trovato l'elemento voluto, usare indexOf è parecchio .... molto "rozzo".
    Tra l'altro, in questo caso non necessariamente devi usare per forza l'iteratore direttamente. Potresti anche usare il "for-each".
    Il punto è che sarebbe meglio tenersi un indice .... non usare indexOf.
    La questione di indexOf è che tira in ballo il concetto della uguaglianza tra oggetti Pubblicazione, ovvero se e come è stato definito il equals(), che nel caso della ricerca esplicita per titolo non c'entrerebbe nulla.

    Quote Originariamente inviata da andy_ Visualizza il messaggio
    codice:
        public int rimuovi(String titolo)
        {
            for(int i=0;i<contenuto.size();i++)
            {
                Pubblicazione pubblicazione=contenuto.get(i);
                if(titolo.equals(pubblicazione.getTitolo()))
                {
                    contenuto.remove(i);
                    this.spazioDisponibile=+pubblicazione.getSpessore();
                    return i;
                }
            }
            return -1;
        }
    
    public Posizione cerca(String titolo)
        {
            for(int i=0;i<numRipiani;i++)
            {
                int j=this.contenuto[i].cerca(titolo);
                if(j!=-1)
                {
                    return new Posizione(i,j);
                }
            }
            return null;
        }
    
    
        public Posizione rimuovi(String titolo)
        {
            for(int i=0;i<contenuto.length;i++)
            {
                int j=contenuto[i].rimuovi(titolo);
                if(j!=-1)
                {
                    return new Posizione(i,j);
                }
            }
            return null;
        }
    In questi non vedo nulla di intrinsecamente sbagliato.
    Anzi, una cosa potrebbe essere dubbia: perché nel penultimo metodo (cerca) hai usato numRipiani mentre nell'ultimo metodo (rimuovi) hai usato contenuto.length?

    Chiaramente non si riesce a vedere il contesto completo del codice ..... quindi potrebbero esserci altri problemi che non sono ora evidenti.
    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
    @andy_: quando posti del codice, inseriscilo all'interno degli appositi tag [CODE] .. [/CODE] in modo da mantenere indentazione e formattazione. Ho apportato io la correzione.


    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
    Registrato dal
    Dec 2014
    Messaggi
    15
    numRipiani era la lunghezza di contenuto, avevo scritto in modo diverso per vedere se il problema era quello. Comunque ora sono riuscito a risolvere, il codice era corretto, era l'IDE che non riusciva a leggere l'input...Facendo partire il programma dal prompt funziona correttamente. Comunque grazie per i consigli sia sull'uso di indexOf sia su come scrivere parti di codice dentro questi messaggi

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.