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

    Java: Esercizio numeri inglese (da numero a parola)

    Salve a tutti, avrei bisogno di una mano con questo esercizio che devo fare:

    Prendere un numero (da textField) e restituire l' equivalente in parola (in inglese):
    1: one
    21: twenty one
    105: one hundred and five

    (Usando le regole di numerazione inglese)

    fino a 999.999.999 senza usare un tokenizer (o separatore), o altre librerie esterne già esistenti.
    All'interno del programma non deve esserci alcuna duplicazione / ripetizione di codice.

    Posso usare come linguaggio di programmazione Java, Objective-C o C++
    ma sinceramente preferirei usare Java.

    Pensavo di risolvere il programma utilizzando una funzione ricorsiva, cosa ne pensate?
    Se avete altre idee fate sapere pure

    Grazie a tutti.

  2. #2
    Utente di HTML.it L'avatar di pan
    Registrato dal
    May 2000
    Messaggi
    141

    Re: Java: Esercizio numeri inglese (da numero a parola)

    Originariamente inviato da alessandros_89
    (Usando le regole di numerazione inglese)
    e quali sarebbero? fino a 100 c'arriverei anche ma oltre...

  3. #3
    usa un'HashMap

    come chiave metti il numero, mentre come valore il numero in inglese (una stringa per intenderci)
    sarà una faticaccia caricare l'hashmap, ma è l'unico modo che attualmente mi viene in mente.
    se non puoi usare l'hashmap, usa due vettori (uno d'interi e uno di stringhe). la faticaccia nel caricarlo c'è anche qui xd

    eccoti un esempio con l'hashmap

    codice:
    import java.util.HashMap;
    /**
     * Progetto d'esempio sull'utilizzo dell'HashMap
     * @autor Naruto 92
     */
    public class NumeriInglesi_HM
    {
        private HashMap map=new HashMap();
        /**
         * Carica l'hashmaap con i numeri desiderati
         */
        private void caricaNumeri(){
            map.put(0, "zero");
            map.put(1, "one");
            map.put(2, "two");
            map.put(3, "three");
            map.put(4, "four");
            map.put(5, "five");
            map.put(6, "six");
            map.put(7, "seven");
            map.put(8, "eight");
            map.put(9, "nine");
            map.put(10, "ten");
            //da inserirsi gli altri numeri
        }
        /**
         * Ritorna il corrispondente del numero cercato in inglese
         * @return una stringa che rappresenta la versione in inglese del numero cercato
         * @param numero il numero da cercare
         */
        public String getNumeroInInglese(int numero){
            Object numeroInglese=map.get(numero);
            return numeroInglese!=null?numeroInglese.toString() : null;
        }
        /**
         * Avvio del programma
         * @param argv array di stringhe passato in automatico dall'OS
         */
        public static void main(String argv[]){
            NumeriInglesi_HM ni=new NumeriInglesi_HM();
            ni.caricaNumeri();
            String numero="";
            for(int i=0; i<20; i++){
                numero=ni.getNumeroInInglese(i);
                if(numero!=null){
                    System.out.println(numero);
                }else{
                    System.out.println("Numero non presente!");
                }
            }
        }
    }
    ed eccoti un esempio con i vettori

    codice:
    /**
     * Progetto d'esempio sull'utilizzo di due vettori per simulare un'HashMap
     * @autor Naruto 92
     */
    public class NumeriInglesi_V
    {
        private String [] numeriInglesi=new String[11];
        private int [] numeri=new int[11];
        /**
         * Carica i vettori con i numeri desiderati
         */
        private void caricaNumeri(){
            for(int i=0; i<11; i++){
                numeri[i]=i;
            }
            numeriInglesi[0]="zero";
            numeriInglesi[1]="one";
            numeriInglesi[2]="two";
            numeriInglesi[3]="three";
            numeriInglesi[4]="four";
            numeriInglesi[5]="five";
            numeriInglesi[6]="six";
            numeriInglesi[7]="seven";
            numeriInglesi[8]="eight";
            numeriInglesi[9]="nine";
            numeriInglesi[10]="ten";
            //da inserirsi gli altri numeri
        }
        /**
         * Ritorna il corrispondente del numero cercato in inglese
         * @return una stringa che rappresenta la versione in inglese del numero cercato
         * @param numero il numero da cercare
         */
        public String getNumeroInInglese(int numero){
            for(int i=0; i<numeri.length; i++){
                if(numeri[i]==numero){
                    return numeriInglesi[i];
                }
            }
            return null;
        }
        /**
         * Avvio del programma
         * @param argv array di stringhe passato in automatico dall'OS
         */
        public static void main(String argv[]){
            NumeriInglesi_V ni=new NumeriInglesi_V();
            ni.caricaNumeri();
            String numero="";
            for(int i=0; i<20; i++){
                numero=ni.getNumeroInInglese(i);
                if(numero!=null){
                    System.out.println(numero);
                }else{
                    System.out.println("Numero non presente!");
                }
            }
        }
    }
    tieni conto che con i vettori hai sempre il limite della dimensione e di non poter trattare dati eterogenei
    I miei esempi in Java qui: http://cdpjavaexamples.altervista.org/index.html

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

    Re: Java: Esercizio numeri inglese (da numero a parola)

    Originariamente inviato da alessandros_89
    (Usando le regole di numerazione inglese)
    Che ovviamente bisogna conoscere bene.

    -> http://en.wikipedia.org/wiki/English_numerals

    Originariamente inviato da alessandros_89
    Pensavo di risolvere il programma utilizzando una funzione ricorsiva, cosa ne pensate?
    No, la "ricorsione" qui non serve. Se ragioni bene e hai una visione complessiva delle regole, scoprirai che, per la maggior parte e salvo casi particolari (es. 0 = "zero") devi raggruppare e trattare le cifre a 3 a 3, in pratica suddividere il numero a migliaia.
    Perché le regole si ripetono effettivamente ma cambiano certe particelle che aggiungi per indicare mille, milioni, ecc....
    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 L'avatar di pan
    Registrato dal
    May 2000
    Messaggi
    141
    avendo più elementi sulle regole la soluzione è semplice.
    seguirei i suggerimenti di andbin. prendi le 3 cifre dei milioni e ricavane il testo, poi prendi le migliaia e ne ricavi il testo concatenandolo a quello precedente ed infine fai il medesimo lavoro sulla parte inferiore alle migliaia.
    le hashmap sono di certo utili ma per un sottoinsieme ridotto dei numeri da gestire, non per tutti quanti. per fare i precisi scarterei anche i valori fuori range.
    ciao

  6. #6
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Originariamente inviato da Naruto 92
    usa un'HashMap

    come chiave metti il numero, mentre come valore il numero in inglese (una stringa per intenderci)
    sarà una faticaccia caricare l'hashmap, ma è l'unico modo che attualmente mi viene in mente.
    Vuoi fargli scrivere a mano i numeri fino a 999.999.999? Stai scherzando vero?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  7. #7
    Originariamente inviato da Alex'87
    Vuoi fargli scrivere a mano i numeri fino a 999.999.999? Stai scherzando vero?
    è la prima idea che mi è venuta in mente
    volendo può ache trovare una wordlist e una numberlist sul web e usarle nel programma caricandole cn gli stream
    I miei esempi in Java qui: http://cdpjavaexamples.altervista.org/index.html

  8. #8
    Utente di HTML.it L'avatar di pan
    Registrato dal
    May 2000
    Messaggi
    141
    il link a wikipedia postato da andbin mostra che la numerazione è abbastanza regolare superate le centinaia. popolare un hashmap con tutti quei valori è uno sforzo che sconsiglierei per i seguenti motivi:
    • - non credo sia così semplice da trovare già fatto su internet
      - farlo a mano è impensabile
      - farlo con Excel per poi caricarlo come stream sarebbe molto oneroso
      - l'hashmap potrebbe risultare pesante (per dire che 1 si dice "one" devo caricare una hashmap da 999.999.999 elementi!)


    propendo per la soluzione di andbin. tra l'altro credo sia più facile trovare su web una classe che faccia tutto il calcolo che la lista dei numeri con la descrizione.

    prova a vedere questa soluzione che ho trovato adesso googlando
    http://wiki.answers.com/Q/Convert_in..._in_java_codes

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