Ajuda com problema usando switch!

5 respostas
arthurmoro

Galera meu professor pediu pra eu fazer um programa que:
O Caixa vai entrar com o Valor da Compra e o valor recebido para pagamento
então eu vo ter que mostrar pra ele o troco e quais as moedas o caixa devera devolver. (o caixa só trabalha com moeda)
Eu fiz com o While.
Porém o professor disse que quer isso com Switch…Case
eu achei uma “solução” porém o Troco é um valor double
e o switch não sei aceita double.
Por exemplo:
Se o troco é de 4 reais de 37 centavos
o Programa tem qe mostrar
1 Real: 4
0,5 centavos: 0
0,25 centavos: 1
0,10 centavos: 1
0,05 centavos:0
0,01 centavos: 2

5 Respostas

JhowTroMundo

Detalhe: 50 centávos é muito diferente de 0,5 (meio) centavo, cara. (50cents/100).

drsmachado

Pensando assim, você resolve este problema…
R$ 0,01 = 1 centavo
R$ 1 = 100 centavos…

anderson.brasil

Veja se te dá uma luz:

Double troco = 1.36D;
        
        DecimalFormat decimalFormatter = new DecimalFormat("0.00");
        int virgula = troco.toString().indexOf("."); // que na verdade é um ponto

        String parteInteira = decimalFormatter.format(troco).substring(0, c);
        String parteFracionaria = decimalFormatter.format(troco).substring(c+1, c+3);

        System.out.println("Parte inteira: " + parteInteira);
        System.out.println("Parte fracionaria: " + parteFracionaria);

        // para centavos
        switch ( Integer.parseInt(parteFracionaria) ){
            // case ..
            // case ..
            case 26:System.out.print("Centavos: " + parteFracionaria);
            // ...
            // 99 ???
 
        }

O problema é que o case poderia ser otimizado, agora como?
Colocar
case 1:
case 2:
...
case 99:

Muito longo não? :?:

L

Para pegar a parte fracionária de um double, com duas casas, você pode fazer:

double d= 3.53d;
int i = (d * 100)%100;

i agora tem o valor 53.

Para ficar genérico, você pode pensar em:
public static int fracao(double x, int casas) {
		int multi = (int) Math.pow(10, casas);
		return (int) (x * multi) % multi;
	}
Concordando com o anderson.brasil, ficaria um switch/case enorme com os 100 casos...
double troco= 3.67d;
		
		int centavosTroco = (int) (troco*100);
		int moedasDeUmReal = (int) (centavosTroco/100);
		int moedasDeCinquenta = (centavosTroco%100)/50;
		int moedasDeVinteCinco = ((centavosTroco%100)%50)/25;
		int moedasDeDez = (((centavosTroco%100)%50)%25)/10;
		int moedasDeCinco = ((((centavosTroco%100)%50)%25)%10)/5;
		int moedasDeUm = ((((centavosTroco%100)%50)%25)%10)%5;
		
		System.out.println(moedasDeUmReal + " x R$ 1,00; " + 
				moedasDeCinquenta + " x R$ 0,50; " + 
				moedasDeVinteCinco + " x R$ 0,25; "+ 
				moedasDeDez + " x R$ 0,10; "+ 
				moedasDeCinco + " x R$ 0,05; "+ 
				moedasDeUm + " x R$ 0,01");

Daria:

3 x R$ 1,00; 1 x R$ 0,50; 0 x R$ 0,25; 1 x R$ 0,10; 1 x R$ 0,05; 2 x R$ 0,01

arthurmoro

Vlw pessoal.
Fiquei sem entregar. riaria
mas meu professor passou um fluxograma disso onde tem que declarar todas as variaveis
e fazer com dois while e um switch.
Acho que na hora ele se expressou mal e falou que era SÓ com switch.
mas vlw pessoal.

ADM…Pode fechar :wink:

Criado 18 de maio de 2011
Ultima resposta 23 de mai. de 2011
Respostas 5
Participantes 5