PDA

View Full Version : [JAVA] consiglio: esercizio, stampare numero in lettere (es 123, stampo uno due tre)


marius84
11-03-2009, 12:33
ciao a tutti..provengo dal C e sto cercando di imparare java.

devo svolgere questo esercizio:
"prendere un un numero n da input e stamapre le cifre di n in lettere.. es: 123 stampo: uno due tre"

io l'ho fatto cosė (creo un metodo e lo uso ricorsivamente), e funziona.. ma sinceramente non mi piace proprio.. c'č qualche altro modo per farlo in modo pių elegante

grazie a tutti

import java.util.*;
import java.lang.String;

public class Conversione {



public static void bho(int x){

if(x%10==x){
if(x==1) System.out.print("uno ");
if(x==2) System.out.print("due ");
if(x==3) System.out.print("tre ");
if(x==4) System.out.print("quattro ");
if(x==5) System.out.print("cinque ");
if(x==6) System.out.print("sei ");
if(x==7) System.out.print("sette ");
if(x==8) System.out.print("otto ");
if(x==9) System.out.print("nove ");
if(x==0) System.out.print("zero ");

return;
}
else{
int a=x%10;
int b=x/10;
bho(b);
if(a==1) System.out.print("uno ");
if(a==2) System.out.print("due ");
if(a==3) System.out.print("tre ");
if(a==4) System.out.print("quattro ");
if(a==5) System.out.print("cinque ");
if(a==6) System.out.print("sei ");
if(a==7) System.out.print("sette ");
if(a==8) System.out.print("otto ");
if(a==9) System.out.print("nove ");
if(a==0) System.out.print("zero ");
}
}

public static void main (String args[]) {
Scanner in=new Scanner(System.in);


System.out.println("inserisci un numero");

int n=in.nextInt();
bho(n);

System.out.println();

}
}

PGI-Bis
11-03-2009, 12:55
Puoi anche usare una mappa con chiavi Character e valori String, tipo

Map<Character, String> numeriInLettere = new HashMap<Character, String>();

infilare nella mappa le corrispondenze:

numeriInLettere.put('0', "zero");
numeriInLettere.put('1', "uno");
numeriInLettere.put('2', "due");
eccetera

Dopodichč per ogni carattere della stringa stampi numeriInLettere.get(carattere).

Se avete fatto le mappe.

In alternativa puoi usare gli array (che sono mappe di un tipo particolare).

Dieci stringhe;

String[] mappa = { "zero", "uno", "due", "tre", ...eccetera };

e passi dal carattere al numero (che sarebbe poi la tua funzione di hashing) con una sottrazione:

indice = stringa.charAt(x) - '0';
e stampi mappa[indice];

ndakota
11-03-2009, 13:08
package prova;
import java.util.*;
import java.lang.String;

public class Main {

public static void foo(int x)
{
String[] vett = {"zero", "uno", "due", "tre", "quattro", "cinque",
"sei", "sette", "otto", "nove"};

if(x % 10 == x)
System.out.println(vett[x]);

else
{
int a = x % 10;
int b = x / 10;

foo(b);

System.out.println(vett[a]);
}
}

public static void main (String args[])
{
Scanner in = new Scanner(System.in);

System.out.println("inserisci un numero: ");
int n = in.nextInt();

foo(n);

System.out.println();
}
}

cionci
11-03-2009, 18:45
"Puliamola" un po':

public static int foo(int x)
{
String[] vett = {"zero ", "uno ", "due ", "tre ", "quattro ", "cinque ",
"sei ", "sette ", "otto ", "nove "};

if(x % 10 != x)
foo(x / 10);

System.out.println(vett[x % 10]);
}

Dovrebbe essere equivalente, non l'ho fatta girare...