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
    Sep 2007
    Messaggi
    102

    Aiuto Programmino in Java

    Ciao a tutti, mi serviva un aiuto su un programma che (credo sia semplice) non riesco a fare. In pratica quando l'utente inserisce una stringa, vengono aggiunte le vocali in successione.

    Esempio:
    l'utente inserisce "ciao"
    in sequenza vengono stampate
    ciaoA
    ciaoE
    ciaoI
    ciaoO
    ciaoU
    ciaoAA
    ciaoAE
    ciaoAI
    ciaoAO
    ciaoAU
    ciaoEA
    .....
    ciaoAAE
    .....
    ciaoOAIE
    ....
    e via cosi con un ciclo potenzialmente infinito. Io ci ho provato a farlo ma non riesco a capire come implementarlo. C'è qualche anima buona che mi dà una mano?

    Grazie di tutto

  2. #2
    codice:
    import java.util.Vector;
    import java.io.*;
    
    public class Vocali {
      protected static char[] vocali = {'a', 'e', 'i', 'o', 'u'};
      public static void main (String[]argv) throws IOException{
        System.out.print("Inserisci la parola: ");
        BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
        String line = br.readLine();
        Vector v = new Vector();
        v.add(line);
        String temp;
        int index = 0;
        while (true){
          temp=(String) v.elementAt(index);
          for(int k=0;k<vocali.length; k++){
            temp+=vocali[k];
            System.out.println(temp);
            v.add(temp);
          }
          index++;
    }
    }
    max

    Silence is better than bullshit.
    @mmarcon
    jHERE, Maps made easy

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102
    GRANDISSIMO non potevo chiedere di meglio. Mille Grazie

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Aiuto Programmino in Java

    Originariamente inviato da Pegasys
    e via cosi con un ciclo potenzialmente infinito. Io ci ho provato a farlo ma non riesco a capire come implementarlo. C'è qualche anima buona che mi dà una mano?
    Per "ciclo potenzialmente infinito" intendi un ciclo che continua a generare un numero arbitrario di lettere aggiuntive?? Cioè, per essere più chiari, non devi prevedere un numero massimo di lettere.

    Comunque, in casi come questi, devi osservare la similitudine con i sistemi di numerazione. Immagina che le 5 lettere siano i numeri da 0 a 4 e tralascia per un momento la questione dell'allineamento (le tue lettere infatti devono essere allineate a sinistra e stare attaccate alla destra della parola).

    Avresti una situazione simile a questa:
    codice:
        0
        1
        2
        3
        4
       00
       01
       02
       03
       04
       10
       11
       ..
       44
      000
      001
      ...
      444
     0000
     0001
     ....
    Cosa noti? La cifra più a destra è quella che si incrementa sempre ad ogni combinazione. Quando una cifra è 4 e deve essere incrementata, ritorna a zero e la cifra alla sinistra viene incrementata di 1.
    Il caso particolare è che se la cifra 4 è quella più a sinistra, la fai tornare a zero e, nota bene, aggiungi uno zero ancora più a sinistra. Ora è più chiaro?

    Come fare questa cosa ... beh, non c'è sicuramente una unica soluzione. Si potrebbe usare uno StringBuffer/StringBuilder e aggiornare direttamente le lettere. Se una lettera è 'A', sai tu che la prossima in sequenza è la 'E'.
    Si potrebbe tenere un vettore di byte (tanto i valori vanno da 0 a 4) in cui fai i calcoli e poi ad ogni combinazione, ricrei una stringa associando le lettere ai valori.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102
    Quindi è come se il sistema contasse in base 5. E' un po macchinoso generare un sistema simile

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    60
    Ma assolutamente no,usi l'operatore modulo ---> %
    "Gli ingegneri progettano il vostro futuro...e loro lo costruiranno..."

  7. #7
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Io ho provato a scriverlo. Ho usato una delle soluzioni che ho detto, cioè la gestione diretta dei caratteri in uno StringBuffer. Quindi niente numeri, moduli, calcoli, ecc...

    Non ho fatto l'input della stringa ... sono pigro (a quest'ora) ... ho messo la stringa "ciao" direttamente nel sorgente. Ma in tutto sono venute fuori solo 40 righe di sorgente.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102
    azz che genio. io non ho ancora provato a lavorarci con la StringBuffer ma da quanto ho visto è un po complesso (per me)

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2007
    Messaggi
    102
    Ho provato con StringBuffer e finchè devo gestire un solo carattere, metto la A e stampo, cancello l'ultimo carattere lo sostituisco con la E e via così fino alla U. Quando devo ricominciare con AA, AE, ... nn so come posso fare perchè dovrei tenere in memoria tutta la parte prima

  10. #10
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da Pegasys
    Ho provato con StringBuffer e finchè devo gestire un solo carattere, metto la A e stampo, cancello l'ultimo carattere lo sostituisco con la E e via così fino alla U. Quando devo ricominciare con AA, AE, ... nn so come posso fare perchè dovrei tenere in memoria tutta la parte prima
    No guarda ... è molto più semplice di quanto pensi. Ti spiego quello che si può fare .. che poi è esattamente quello che ho scritto io nel mio sorgente di prova.

    Innanzitutto per cambiare un carattere non è necessario eliminarlo e poi inserirlo, basta che usi setCharAt() e sovrascrivi semplicemente il carattere. Per l'aggiunta di una lettera è anche semplice, basta solo pensare a cosa succede nei sistemi di numerazione. Una lettera la devi aggiungere quando tutti i caratteri "fanno il giro". Cioè quando ad esempio hai:

    codice:
     UUA
     UUE
     UUI
     UUO
     UUU  <-- ultima combinazione, poi "fa il giro"
    AAAA  <-- aggiungi un carattere a sinistra
    Concettualmente uguale a quello che succede con i numeri (999 + 1 = 1000, i tre digit hanno "fatto il giro").

    Nel mio sorgente ho usato la stessa logica del "riporto" che si usa anche con i numeri. Parto dalla lettera più a destra con un "carry" (riporto) iniziale e quindi incremento la lettera. Se fa il giro, il carry passa sulla lettera più a sinistra e così via.
    Man mano mi sposto anche come indice nello StringBuffer. Se alla fine delle lettere ho ancora un "carry", allora tutte le lettere hanno fatto il giro e quindi inserisco una lettera nella posizione in cui mi trovo (proprio la lettera più a sinistra).
    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.