package acnumeroletras;
public class CnumeroLetras
{
private double n, um2;
private int u, d, c, um;
private int d1, d2, u1, c2, m1, m2, m3, c3, um1,DmC;
private String cadena = " ";
private String unidades[] = {" ", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve"};
private String decenas[] = {" ", "diez", "veinte", "treinta", "cuarenta", "cincuenta", "sesenta", "setenta", "ochenta", "noventa"};
private String decenas1[] = {"diez", "once", "doce", "trece", "catorce", "quince", "dieciseis", "diecisiete", "dieciocho", "diecinueve"};
private String centenas[] = {" ", "cien", "doscientos", "trescientos", "cuatrocientos", "quinientos", "seiscientos", "setecientos", "ochocientos", "novecientos"};
private String unidadesMill[] = {"", "", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve"};
private String millonesstr[] = {"", "un", "dos","tres","cuatro","cindo","seis","siete","ocho","nueve"};
public CnumeroLetras(int n)
{
this.n = n;
}
private void calculaUnidades() {
double unidad1 = n%10;
int unidad3 = (int) unidad1;
if((u1==1))
cadena=cadena+" ";
else
cadena=cadena+unidades[unidad3]+" ";
// System.out.println(unidades[unidad3]+" ");
}
private void calculaDecenas()
{
// d = (int) ((n - (c * 100) - u) / 10);
double Cdecenas1 = n%100;
double Cdecenas3 = Cdecenas1/10;
int decenas4 = (int) Cdecenas3;
// System.out.println(decenas[decenas4]+" ");
switch (decenas4)
{
case 1:
double Ucase1 = n%10;
int RUcase1 = (int) Ucase1;
// System.out.println(decenas1[RUcase1]);
cadena = cadena + decenas1[RUcase1]; //once, doce, trece etc...
u1 = 1;
break;
case 2:
// d1 = (int) (n % 10);
double Ucase2 = n%10;
int RUcase2 = (int) Ucase2;
if ((RUcase2 == 0))
{
cadena = cadena + decenas[d] + " ";
}
else
{
cadena = cadena + "veinti";
cadena = cadena + unidades[d1] + " "; //veinti+numero
u1 = 1;
}
System.out.println(u);
break;
default:
switch (decenas4)
{
case 0:
{
cadena = cadena + " "; //si decenas=0, deja decenas en blanco
}
break;
default:
{
// d2 = (int) (n % 10);
double UcaseD = n%10;
int RUcaseD = (int) UcaseD;
if ((RUcaseD == 0)) {
cadena = cadena + decenas[decenas4]; //en caso de que decenas>0 y unidades=0 solo muestra las decenas
} else {
cadena = cadena + decenas[decenas4] + " " + "y" + " "; //treinta y... en adelante
}
// System.out.println(d);
}
break;
}
break;
}
}
private void calculaCentenas() {
double ncentenas = (n%1000);
double ncentenas3 = ncentenas/100;
int ncentenas2 = (int) ncentenas3;
double Cdecenas1 = n%100;
double Cdecenas3 = Cdecenas1/10;
if((Cdecenas3>0) && (ncentenas2==1))
cadena=cadena+"ciento"+" ";
else
cadena=cadena+centenas[ncentenas2]+" ";
}
private void calculaUMillar()
{
double nmillar = n/1000;
int nmillar2 = (int) nmillar;
if ((DmC==1))
{
cadena=cadena+" ";
}
else
{
cadena = cadena + unidadesMill[nmillar2]+" "+"mill"+" ";
}
}
private void calculaDMillar()
{
double Dmillar2 = n/10000;
int Dmillar = (int) Dmillar2;
System.out.println(Dmillar2);
System.out.println(Dmillar);
cadena=cadena+decenas[Dmillar];
System.out.println(decenas[Dmillar]);
switch (Dmillar)
{
case 1:
double umcase1 = n/1000;
int Rumcase1 = (int) umcase1;
cadena = cadena + decenas1[Rumcase1]+" mil "; //once, doce, trece etc...
DmC = 1;
break;
case 2:
// d1 = (int) (n % 10);
// int RUcase2 = (int) Ucase2;
//
double umcase2 = n/1000;
int Rumcase2 = (int) umcase2;
if ((Rumcase2 == 0))
{
cadena = cadena + decenas[Dmillar] +" mil ";
}
else
{
cadena = cadena + "veinti";
cadena = cadena + unidades[Rumcase2] + " "; //veinti+numero
DmC = 1;
}
// System.out.println(u);
break;
default:
switch (Dmillar)
{
case 0:
{
cadena = cadena + " "; //si decenas=0, deja decenas en blanco
}
break;
default:
{
// d2 = (int) (n % 10);
// double UcaseD = n%10;
// int RUcaseD = (int) UcaseD;
double umcaseD = n/1000;
int RumcaseD = (int) umcaseD;
if ((RumcaseD == 0)) {
cadena = cadena + decenas[Dmillar]+" mil "; //en caso de que decenas>0 y unidades=0 solo muestra las decenas
} else {
cadena = cadena + decenas[Dmillar] + " " + "y" + " "; //treinta y... en adelante
}
// System.out.println(d);
}
break;
}
break;
}
}
private void calculaMillones(){
double nmillones = (n%10000);
double nmillones3 = nmillones/1000;
int nmillones2 = (int) nmillones3;
if((n<1000000))
cadena = cadena +"";
else
{
switch(nmillones2)
{
case 1:
cadena = cadena + millonesstr[nmillones2]+" "+"millon";
break;
default:
cadena = cadena + millonesstr[nmillones2]+" "+"millones";
break;
}
}
}
public String regresaDescripcion() {
calculaMillones();
calculaDMillar();
calculaUMillar();
calculaCentenas();
calculaDecenas();
calculaUnidades();
return cadena;
}
}
I enter the values in the class main
, here they enter the variable n
and when putting numbers with tens of thousands, I get an error
this is the error code by entering the number 10000
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10 at acnumeroletras.CummerLetras.calculaumeumber (CnumeroLetras.java:124) at acnumeroletras.CenumeroLetras.recgresaDescripcion (CnumeroLetras.java:227) at acnumeroletras.ACnumeroletras.main (ACnumeroletras.java:13)
The program works smoothly from 9999
downwards.