Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 22
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2017
    residenza
    Terni
    Messaggi
    22

    invertire una stringa ed eliminazione delle vocali

    Salve a tutti, ho appena effettuato la registrazione al sito e ne sono felice. Ho un problema da risolvere: SCRIVERE UN METODO RICORSIVO CHE RICEVE IN INPUT UNA STRINGA s ED ALTRI PARAMETRI SE NECESSARIO E RESTITUISCE UNA STRINGA s1 CHE E' L'INVERSO DI S UNA VOLTA RIMOSSE TUTTE LE VOCALI. AD ESEMPIO SE LA STRINGA DI INPUT FOSSE "abracadabra", LA STRINGA RESTITUITA DOVREBBE ESSERE "rbdcrb".


    Ho scritto il seguente codice, il compilatore non mi da errori, però quando vado ad eseguire mi dice StringIndexOutOfBoundsException e non riesco a capire proprio il perchè.

    codice:
    import fond.io.InputWindow;
    import fond.io.OutputWindow;
    
    public class Inverso{
    
                public static String inv(String s, int i){
    
                        String invertita;
    
                            if(s.length()==0)
                                    invertita = "";
                            else 
                                         {
                                             if(s.charAt(i)=='A' || s.charAt(i)=='E' ||
                                                  s.charAt(i)=='I' || s.charAt(i)=='O' ||
                                                  s.charAt(i)=='U' || s.charAt(i)=='a' ||
                                                  s.charAt(i)=='e' || s.charAt(i)=='i' ||
                                s.charAt(i)=='o' || s.charAt(i)=='u')
                
                                                       invertita = "" + inv(s,i+1);
                                         else
                                                       invertita = inv(s.substring(1),i+1) + s.charAt(0);
                
                
                               }
    
            
        return invertita;
        
        }


    Spero possiate aiutarmi. Un grazie in anticipo a tutti.
    Ultima modifica di LeleFT; 27-01-2017 a 17:49 Motivo: Aggiunti i tag CODE

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,280
    Non ho letto il codice in dettaglio ma ti posso assicurare che è certamente possibile rendere il codice migliore e più compatto.
    Innanzitutto realizza un metodo a parte che dato un carattere dice se è una vocale, questo permette di non allungare il tuo inv() rendendolo anche più leggibile.
    Poi, altro consiglio, parti con il realizzare la sola inversione della stringa ricorsivamente, senza alcun "filtro" sui caratteri. Ti dico anche subito che quel parametro int i è assolutamente superfluo e inutile!
    Una volta che hai fatto la inversione ricorsivamente, aggiungere il filtro è di una banalità disarmante ...
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2017
    residenza
    Terni
    Messaggi
    22
    Sinceramente, siccome sto preparando il primo esame di informatica sul java, più che a rendere compatto il codice sono interessato a farlo funzionare. Non riesco a capire perchè, una volta lanciato, qualsiasi stringa io inserisca mi esce fuori quell'errore.
    Grazie per avermi risposto.

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2017
    residenza
    Terni
    Messaggi
    22
    Ho risolto cosi e oa funziona tutto

    import fond.io.InputWindow;
    import fond.io.OutputWindow;

    public class Inverso{

    public static String inv(String s, int i){

    String s2;
    if(i==s.length())
    s2 = "";
    else
    {
    if(s.charAt(i)=='A' || s.charAt(i)=='E' ||
    s.charAt(i)=='I' || s.charAt(i)=='O' ||
    s.charAt(i)=='U' || s.charAt(i)=='a' ||
    s.charAt(i)=='e' || s.charAt(i)=='i' ||
    s.charAt(i)=='o' || s.charAt(i)=='u')

    s2 = "" + inv(s, i+1);
    else
    s2 = inv(s,i+1) + s.charAt(i);
    }


    return s2;

    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Però il tuo codice per funzionare presuppone che venga passato un indice corretto all'inizio ...

    Come ti è stato detto puoi benissimo fare a meno di passare un intero come parametro, puoi passare solamente la stringa da invertire.

    Ad esempio: controlli l'ultimo carattere della stringa e scegli se mantenerlo o no (se è una vocale o meno), poi chiami ricorsivamente il metodo sulla sottostringa ottenuta togliendo l'ultimo carattere della stringa. In questo modo l'unico controllo che vai a fare è sulla lunghezza della stringa, senza nessun parametro.

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,280
    Quote Originariamente inviata da Al3xiei Visualizza il messaggio
    Ho risolto cosi e oa funziona tutto
    Sì ma hai fatto il triplo o forse anche il quadruplo di quello che invece basterebbe .... prova (per tuo esercizio/curiosità) a ridurre la logica.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2017
    residenza
    Terni
    Messaggi
    22
    Ciao ragazzi ho modificato ancora il programma togliendo il parametro intero aggiuntivo come mi avete detto voi. Sono alle prime armi, che ne dite???? Bello codividere idee con altri top top top.

    import fond.io.InputWindow;
    import fond.io.OutputWindow;

    public class Inverso{

    public static String inv(String s){

    String s2;
    if(s.length()==0)
    s2 = "";
    else
    {
    if(s.charAt(s.length()-1)=='A' || s.charAt(s.length()-1)=='E' ||
    s.charAt(s.length()-1)=='I' || s.charAt(s.length()-1)=='O' ||
    s.charAt(s.length()-1)=='U' || s.charAt(s.length()-1)=='a' ||
    s.charAt(s.length()-1)=='e' || s.charAt(s.length()-1)=='i' ||
    s.charAt(s.length()-1)=='o' || s.charAt(s.length()-1)=='u')

    s2 = inv(s.substring(0,s.length()-1)) + "";
    else
    s2 = s.charAt(s.length()-1) + inv(s.substring(0,s.length()-1));
    }


    return s2;

    }

  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,280
    Quote Originariamente inviata da Al3xiei Visualizza il messaggio
    ho modificato ancora il programma togliendo il parametro intero aggiuntivo come mi avete detto voi.
    Ok, come vedi non era affatto necessario quel parametro.
    Ora, invece di isolare l'ultimo carattere, prova a isolare il primo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2017
    residenza
    Terni
    Messaggi
    22
    intendi cosi?????

    import fond.io.InputWindow;
    import fond.io.OutputWindow;

    public class Inverso3{

    public static String inv(String s){

    String s2;
    if(s.length()==0)
    s2 = "";
    else
    {
    if(s.charAt(0)=='A' || s.charAt(0)=='E' ||
    s.charAt(0)=='I' || s.charAt(0)=='O' ||
    s.charAt(0)=='U' || s.charAt(0)=='a' ||
    s.charAt(0)=='e' || s.charAt(0)=='i' ||
    s.charAt(0)=='o' || s.charAt(0)=='u')

    s2 = inv(s.substring(1)) + "";
    else
    s2 = inv(s.substring(1)) + s.charAt(0);
    }


    return s2;

    }

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,280
    Quote Originariamente inviata da Al3xiei Visualizza il messaggio
    intendi cosi?????
    Sì, è più semplice no?
    Ora prova a eliminare la variabile s2 (si può, non è strettamente necessaria). E a togliere le ripetizioni di charAt. Una tecnica furba che sostituisce tante OR come quelle è la ricerca del carattere in una stringa dove ci sono le vocali.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.