Bom dia, queria um auxílio pra finalizar este problema:
(Construa a classe Dinheiro. Esta classe tem um único atributo que é um valor inteiro em R$. Faça os métodos básicos: construtor, get, set e toString, sabendo que o valor deve pertencer ao intervalo [1;999]. Em caso de valor incorreto, o valor padrão do atributo é 1. Implemente usando o switch, um método que devolve uma String com o valor escrito por extenso. Não faça um case para cada valor possível, trate centena, dezena e unidade.)
Bem, eu fiz 3 métodos(p/ converter a dezena, a centena e a unidade), o problema é para imprimir, por exemplo se o nº for 19, tem que imprimir apenas a dezena e imprimi dezenove e nove, pois para imprimir eu concateno centena, dezena e unidade.
Segue o código:
public class Converte {
private int valor;
public Converte(int valor) {
setValor(valor);
}
public int getValor() {
return valor;
}
public void setValor(int valor) {
if (valor > 0 && valor < 1000)
this.valor = valor;
else this.valor = 1;
}
public String converteCentena() {
int c = valor/100;
String centena = "";
switch(c) {
case 1: if (valor == 100)
centena = "Cem";
else centena = "cento e";
break;
case 2: centena = "duzentos";
break;
case 3: centena = "trezentos";
break;
case 4: centena = "quatrocentos";
break;
case 5: centena = "quinhentos";
break;
case 6: centena = "seiscentos";
break;
case 7: centena = "setecentos";
break;
case 8: centena = "oitocentos";
break;
case 9: centena = "novecentos";
} return centena;
}
public String converteDezena() {
int d = valor%100/10;
int u = valor%100%10;
String dezena = "";
switch(d) {
case 1: switch(u) {
case 0: dezena = "e dez";
break;
case 1: dezena = "e onze";
break;
case 2: dezena = "e doze";
break;
case 3: dezena = "e treze";
break;
case 4: dezena = "e quatorze";
break;
case 5: dezena = "e quinze";
break;
case 6: dezena = "e dezesseis";
break;
case 7: dezena = "e dezessete";
break;
case 8: dezena = "e dezoito";
break;
case 9: dezena = "e dezenove";
break;
} break;
case 2: dezena = "vinte";
break;
case 3: dezena = "trinta";
break;
case 4: dezena = "quarenta";
break;
case 5: dezena = "cinquenta";
break;
case 6: dezena = "sessenta";
break;
case 7: dezena = "setenta";
break;
case 8: dezena = "oitenta";
break;
case 9: dezena = "noventa";
} return dezena;
}
public String converteUnidade() {
int u;
String unidade = "";
u = valor%100%10;
if (valor < 10) {
switch(u){
case 1: unidade = "um";
break;
case 2: unidade = "dois";
break;
case 3: unidade = "tres";
break;
case 4: unidade = "quatro";
break;
case 5: unidade = "cinco";
break;
case 6: unidade = "seis";
break;
case 7: unidade = "sete";
break;
case 8: unidade = "oito";
break;
case 9: unidade = "nove";
break;
}
}
else {
switch(u){
case 1: unidade = "e um";
break;
case 2: unidade = "e dois";
break;
case 3: unidade = "e tres";
break;
case 4: unidade = "e quatro";
break;
case 5: unidade = "e cinco";
break;
case 6: unidade = "e seis";
break;
case 7: unidade = "e sete";
break;
case 8: unidade = "e oito";
break;
case 9: unidade = "e nove";
}
} return unidade;
}
}
*** Tameio grande, e ainda com alguns erros na impressão do “e” também…asvezes n sai o “e” e as vezes sai a mais…
Aqui o código onde mando imprimir(minha classe App):
public class App {
public void executa() {
Console cons = new Console();
cons.print("Digite um valor entre 1 e 999: ");
int n = cons.readInt();
Converte d = new Converte(n);
cons.print("O valor digitado foi: [R$ "+d.getValor()+",00]"+" --> "+d.converteCentena()+" "+d.converteDezena()+" "+d.converteUnidade()".");
}
public static void main(String args[]) {
App ap1 = new App();
ap1.executa();
}
}
Grato,
Jeferson Neves