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

    [Java]Codice Poco chiaro!Help :(

    A distanza di qualche mese dal corso universitario che ho seguito, questo pomeriggio ho trovato delle difficoltà che mi hanno innervosito non poco Vi scrivo qui di seguito le classi e lascio a fine post le domande!!Ringrazio quanti mi sapranno chiarire i dubbi che mi assillano da ore!!!

    Esercizio:Analizzare un testo e vedere le parole che contiene.(ho volutamente tralasciato l'uso della classe Vector che semplifica di gran lunga il problema)

    Partendo da questa classe Abstract:

    package poo.tabella;

    public abstract class Tabella{
    protected int cardinalità=0;//numero di Objs presenti

    public int cardinalità(){
    return cardinalità;
    }

    public abstract boolean esiste(string elem);
    public abstract void rimuovi(String elem);
    public abstract void inserisci(String elem);
    public abstract void inserisci(String elem,boolean sempre);
    public abstract void visualizza();
    }//fine classe


    Ridefinisco più nel dettaglio la classe Tabella!

    package poo.tabella;

    public class TabellaOrdinata extends Tabella{
    protected int n;
    protected String[]elenco;
    protected int pos;

    public TabellaOrdinata(int n){
    this.n=n;
    elenco=new String[n];
    }

    public void visualizza(){
    for(int i=0;i<cardinalità;i++)
    System.out.println(elenco[i]);
    }

    public boolean esiste(string e){

    int inf=0;
    int sup=n-1;
    boolean trovato=false;

    String El=e.toUpperCase();
    while(inf<=sup && !trovato){
    pos=(inf+sup)/2

    if(elenco[pos].equals(El)){
    trovato=true;
    }
    else
    if(elenco[pos].compareTo(El)>0)
    sup=pos-1;
    else
    inf=pos+1;
    }



    ........//continuazione programma

    Sto cercando di capire come funziona il metodo ESISTE della classe TABELLAORDINATA

    Domande

    1-"if(elenco[pos].compareTo(El)>0)"
    Il compareTo con quale criterio può decidere se una stringa è "maggiore" di 1 altra...In base ai caratteri che la compongono?????E di quale utilità è il compareTo in questo contesto!!

    2-A livello pratico non riesco a capire come gira questo tipo di metodo....ho scritto negli appunti che è 1 tipo di ricerca binaria...ma nonostante mi ci metta di buona volontà non riesco a capirne l'esecuzione effettiva


    Un Enorme grazie a quanti mi daranno una mano...visto che ho l'esame di Programmazione agli Oggetti a breve

    /kiZz
    »A r t e m i s h a «

  2. #2
    1-"if(elenco[pos].compareTo(El)>0)"
    Il compareTo con quale criterio può decidere se una stringa è "maggiore" di 1 altra...In base ai caratteri che la compongono?????E di quale utilità è il compareTo in questo contesto!!
    Il metodo compareTo sulle stringhe controlla che una stringa sia maggiore , minore o uguale di un'altra e ritorna come valore un intero , e più precisamente 0(uguali) ,1(quella di sinistra precede quella di destra) , -1(quella di destra precede quella di sinistra) ..se non ricordo male.

    2-A livello pratico non riesco a capire come gira questo tipo di metodo....ho scritto negli appunti che è 1 tipo di ricerca binaria...ma nonostante mi ci metta di buona volontà non riesco a capirne l'esecuzione effettiva
    Non è che è un tipo di ricerca binaria è la ricerca binaria
    Esempio:
    elenco.length=6

    La prima volta pos=(inf+sup)/2=(0+5)/2=2
    e tu vai a confrontare l'elemento in elenco[pos] con la tua stringa.

    Se elenco[pos] è uguale alla stringa 'e' hai finito e ritorni true, altrimenti devi controllare se elenco[pos] sia maggiore di 'e' e lo fai con quell'if: if(elenco[pos].compareTo(El)>0)
    se la tua stringa è minore dell'elemento elenco[pos] vuol dire che non c'è bisogno che tu continui la ricerca nel vettore di destra , tanto è sicuro che li non la troverai mai e allora sposti le tue ricerche nel vettore di sinistra
    sup=pos-1;
    altrimenti succederà il contrario e le tue ricerche si sposteranno nel vettore di destra , tralasciando quello di isnistra
    inf=sup+1;

    In questo modo non scandisci tutto il vettore , ma cerchi sempre in un vettore che ad ogni iterazione ha dimensione n/2.
    Da notare che questo metodo è applicabile solo per array ordinati

    Esempio concreto

    String elenco[]={"cane","casa","ciao","dado","gatto","topo"};
    String e="casa";

    1° iterazione)
    inf =0 ; sup=5;
    trovato=false;

    inf<sup? si !trovato? si
    pos=(0+5)/2;
    elenco[pos].equals(e)? no
    elenco[pos].compareTo(e)>0? si
    sup=pos-1;

    2°) inf<sup?si !trovato?si
    pos=(0+2)/2;
    elenco[pos].equals(e)? si
    trovato=true;

    3°)inf<sup?si !trovato? no
    stop e return true .

    Spero di essere stato chiaro , anche se un pò lungo


    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

  3. #3
    Si sei stato chiarissimo e ironia della sorte leggo che sei di Cosenza Sei un discepolo di Libero Nigro come me?? :tongue:

    Cmq sia per risolvere problemi come questi uso quasi sempre la classe Vector...cosi mi evito un bel po di casini ^__^

    CiauZ e ThX ^__^
    »A r t e m i s h a «

  4. #4
    Si , ex discepolo per fortuna ..
    per foruna nel senso che ho passato gli esami di programmazione , intendiamoci altrimenti il prof è un grande
    Lang=Java
    Ambiente = Eclipse forever
    Ubuntu & Win XP Pro

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.