Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 20 su 20
  1. #11
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    Vediamo...ci riprovo
    No, non ancora. Innanzitutto nel caso di foglia puoi semplificare il return. Dicevo prima: non serve per forza un if .... hai l'espressione della condizione che è .... un boolean!

    Nella parte finale, neanche. Va bene sfruttare quel a==null iniziale per poter invocare comunque verifica ricorsivamente. Ma se b è true, non restituisci al chiamante true!

    E nella parte finale puoi comunque semplificare molto: quale è quell'operatore che verifica se almeno uno dei due operandi è true e se il primo è true NON valuta il secondo operando?
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  2. #12
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Beh...Mi butteresti quattro righe di codice?
    Giusto per avere maggior chiarezza della soluzione.

    Intanto ci riprovo nuovamente :-)

    codice:
    public static boolean verifica(AlberoBinario a){
      if(a==null) return false;
       if(a.sinistro()==null && a.destro()==null) return a.val()>=0;
        else{
          boolean b = verifica(a.destro());
           if(!b) return verifica(a.sinistro());
        }
       return true;
    }
    Ultima modifica di Markus85; 16-10-2018 a 18:23

  3. #13
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    Intanto ci riprovo nuovamente :-)

    codice:
    public static boolean verifica(AlberoBinario a){
      if(a==null) return false;
       if(a.sinistro()==null && a.destro()==null) return a.val()>=0;
        else{
          boolean b = verifica(a.destro());
           if(!b) return verifica(a.sinistro());
        }
       return true;
    }
    Sì, così con il return true; finale è funzionalmente corretto. Se b è true, non fai il sinistro e restituisce true. Se b è false, fai il sinistro e restituisce il suo risultato, qualunque sia. E' una forma di OR con comportamento detto short-circuit.

    Ma è un po' contorto (e non mi piace granché). Conosci l'operatore di OR "logico"? Se conosci && (il AND "logico") ... dovresti.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  4. #14
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Ma è un po' contorto (e non mi piace granché). Conosci l'operatore di OR "logico"? Se conosci && (il AND "logico") ... dovresti.
    Mi fai un esempio?

  5. #15
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    Mi fai un esempio?
    Hai 2 invocazioni ricorsive di verifica(AlberoBinario), una passando il "sinistro" e l'altra il "destro" (scegli tu quale per primo). Bene, i due valori di ritorno mettili in OR "logico" e restituisci il risultato.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  6. #16
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Vediamo...
    publicstaticboolean verifica(AlberoBinario a){
    if(a==null)returnfalse;
    if(a.sinistro()==null&& a.destro()==null)return a.val()>=0;
    else{
    if(verifica(a.destro()) || verifica(a.sinistro()));
    return true;
    }
    returnfalse;
    }

  7. #17
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    Vediamo...
    Sì corretto. Ma ripeto quanto detto prima: quella espressione dà già un boolean. Quindi serve davvero il if con i 2 rami?? Ricordalo!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  8. #18
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Sì corretto. Ma ripeto quanto detto prima: quella espressione dà già un boolean. Quindi serve davvero il if con i 2 rami?? Ricordalo!
    codice:
    public static boolean verifica(AlberoBinario a){
     if(a==null) return false;
      if(a.sinistro()== null && a.destro()== null) return a.val()>=0;
      else{
          verifica(a.sinistro()) || verifica(a.destro());
      }
    }

  9. #19
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da Markus85 Visualizza il messaggio
    codice:
      else{
          verifica(a.sinistro()) || verifica(a.destro());
      }
    E il return??
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  10. #20
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    339
    ....
    codice:
    public static boolean verifica(AlberoBinario a){
     if(a==null) return false;
      if(a.sinistro()== null && a.destro()== null) return a.val()>=0;
      else
       verifica(a.sinistro()) || verifica(a.destro());
     return true;
    }

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 © 2024 vBulletin Solutions, Inc. All rights reserved.