Ajuda com caixa xP

9 respostas
P

entao, meu professor é horrivel ele nao explica o conteudo querendo com que os alunos adivinhem o que deve ser feito. porem ele passou um “tema” valendo nota e to quebrando a cabeça para fazer. se puderem me dar uma ajuda ae :X

Bem ele disse para pegar um valor qualquer e fazer com que fosse fornecido em notas o valor, porem em menor numero de notas.
exemplo: valor : 257 R$ , e o programa vai dizer quais notas e quantas ele vai dar: 2x de 100R$ , 1x de 50R$ , 1x de 5R$ e 2x de 1R$ feixando os 257R$.

ele deu só o inicio que é o seguinte:

<blockquote>Public class Banco {

Public static void main (string[]args)

{

caixa (257);

}

public static void caixa (int valor)</blockquote>

foi só isso que ele deu , se puderem me ajudar agradeço muito.

9 Respostas

J

Amigo não vou fazer para você pois precisa aprender.

Mas você terá que fazer basicamente o seguinte:

  • Dividir o valor pelas notas disponiveis e ir sempre dividindo o resto.

Ex:
257 / 100 = 2
Resto = 57
Significa que sao 2 notas de 100

Ai vc pega 57 e divide pela proxima nota que é 50
1 nota de 50 e sobra 7

Como 7 é menor que 20 e menor que 10 não deve dividir por estas notas.

E assim por diante!

Da para colocar as notas disponiveis em algum objeto, array o que for e desta forma otimizar bem a lógica, mas deixa isso pro final, depois que funcionar!

Boa Sorte

PS:

Não seria uma nota de R$ 2, ao invés de 2 notas de R$ 1 ??? Pelo que eu saiba também não tem mais nota de R$ 1 só moedas… como ele pediu int não precisa se preocupar com decimais, fica mais simples ainda!

S

Será que isso te ajuda?

import javax.swing.JOptionPane;

Public class Banco {

public void caixa(int valor){

int notas[] = new int[];

nota [0] = 100;
nota [1] = 50;
nota [2] = 2;
nota [3] = 1;

int ind = 0;

while (valor > 0)

{

if (valor >= nota[ind]) {

qtde = valor / nota[ind];
valor = valor % nota[ind];

System.out.println("Quantidade das notas de" + nota[ind] + "reais..." + qtde);

}

ind++;

 
}

}

 
Public static void main (string[]args) {

Banco app = new Banco();

app.caixa(Integer.parseInt(JOptionPane.showInputDialog("Digite um valor para saque.")));

}

}
J

Bem… já que postaram a solução e hoje é sexta-feira… perdi 10 minutinhos aqui!

Esta é a forma de aplicar a solução de uma maneira totalmente procedural:
(Veja que o código é menor, porém mais dificil de enteder e as responsabilidades estão confusas)

public class Banco {

	public static void main (String[] args) {
		caixa (257);
	}
	
	public static void caixa (int valor) {
		int[] notas = new int[6];
		notas[0] = 100;
		notas[1] = 50;
		notas[2] = 20;
		notas[3] = 10;
		notas[4] = 5;
		notas[5] = 2;

		int[] qtdeNotas = new int[6];

		int nota = 0;
		while (nota < 6) {
			if (valor >= notas[nota]) {
				qtdeNotas[nota] = valor / notas[nota];
				valor = valor % notas[nota];				
			}
			nota++;
		}
		
		for (int x = 0; x < 6; x++) {
			if (qtdeNotas[x] > 0) {
				System.out.print(qtdeNotas[x] + "x de " + notas[x] + "R$");
				if (x == 5) {
					System.out.print(".");
				} else {
					System.out.print(",");
				}
			}
		}
		
		
	}
}

Esta é a forma de implementar Orientado a Objetos.
No caso a modelagem esta MUITO LONGE de ser o ideal, e também a questão das responsabilidades devesse ser mais quebrada, mas o foco é mostra aqui, que fica mais claro entender, além do que cada objeto tem uma parte da responsabilidade.

import java.util.ArrayList;
import java.util.List;

public class Banco2 {

	class Caixa {
	
		private List<Nota> listaNotas;
		
		public Caixa() {
			listaNotas = new ArrayList<Banco2.Nota>();
			listaNotas.add(new Nota(100, "cem"));
			listaNotas.add(new Nota(50, "cinquenta"));
			listaNotas.add(new Nota(20, "vinte"));
			listaNotas.add(new Nota(10, "dez"));
			listaNotas.add(new Nota(5, "cinco"));
			listaNotas.add(new Nota(2, "dois"));
			listaNotas.add(new Nota(1, "hum"));
		}
		
		public void calcularNotas(int valor) {
			for (Nota nota : listaNotas) {
				valor = nota.armazenarQuantidade(valor);
			}
		}
		
		public String gerarTextoNotasCalculadas() {
			StringBuilder sb = new StringBuilder("");
			for (Nota nota : listaNotas) {
				if (nota.getQuantidade() > 0) {
					sb.append(String.valueOf(nota.getQuantidade()));
					
					if (nota.getValor() > 1) {
						if (nota.getQuantidade() > 1) {
							sb.append(" notas ");	
						} else {
							sb.append(" nota ");
						}
					} else {
						if (nota.getQuantidade() > 1) {
							sb.append(" moedas ");	
						} else {
							sb.append(" moeda ");
						}						
					}
					sb.append("de ");					
					sb.append(nota.getDescricao());
					if (nota.getValor() > 1) {
						sb.append(" Reais. ");
					} else {
						sb.append(" Real. ");
					}
				}
			} 
			return sb.toString();
		}
		
	}
	
	class Nota {
		private int valor;
		private String descricao;
		private int quantidade;
		
		public Nota(int valor, String descricao) {
			this.valor = valor;
			this.descricao = descricao;
		}
		
		public int getQuantidade() {
			return quantidade;			
		}
		
		public String getDescricao() {
			return descricao;
		}
		
		public int getValor() {
			return valor;
		}
		
		public int armazenarQuantidade(int valorDinheiro) {
			int valorRestante = valorDinheiro;
			if (valorDinheiro >= valor) {
				quantidade = valorDinheiro / valor;
				valorRestante = valorDinheiro % valor;
			} else {
				quantidade = 0;
			}
			return valorRestante;
		}
		
		
	}
	
	public static void main (String[] args)
	{
		caixa (3788);
	}
	public static void caixa (int valor) {
		Caixa caixa = new Banco2().new Caixa();
		caixa.calcularNotas(valor);
		System.out.println(caixa.gerarTextoNotasCalculadas());
	}
}

Queria deixar o amigo pensar… afinal… se quem ta estudando não quebra a cabeça, não aprende! Mas já que postaram é legal olhar as duas formas e entender!

P

tava até agora tentando quebrar a cabeça aki, olhando alguns video aula pra ve se pego um pouco do conteudo.

só tive 2 aulas de logica e isso tudo é novo pra mim , maioria das coisas nao sei ainda.

/\ esse ultimo q vc postou tem como fazer + simples ?

pq o professor falou pra nao usar comandos q ainda nao aprendemos como o “for” “while” e nao usarmos o “return” e fazer com void.

e obg pela atenção

J

tava até agora tentando quebrar a cabeça aki, olhando alguns video aula pra ve se pego um pouco do conteudo.

só tive 2 aulas de logica e isso tudo é novo pra mim , maioria das coisas nao sei ainda.

/\ esse ultimo q vc postou tem como fazer + simples ?

pq o professor falou pra nao usar comandos q ainda nao aprendemos como o “for” “while” e nao usarmos o “return” e fazer com void.

Ok… então terá de implementar da forma procedural…

Você vai ter que fazer tudo com if…
e vai ter um monte de código repetido…

da 5 minutos que posto!

J

Mais simples que isso… dificil…

public class Banco3 {

	public static void main (String[] args) {
		caixa (257);
	}
	
	public static void caixa (int valor) {
				
		if (valor >= 100) {
			System.out.print(valor / 100 + "x de 100R$,");
			valor = valor % 100;
		}
		if (valor >= 50) {
			System.out.print(valor / 50 + "x de 50R$,");
			valor = valor % 50;
		}
		if (valor >= 20) {
			System.out.print(valor / 20 + "x de 20R$,");
			valor = valor % 20;
		}
		if (valor >= 10) {
			System.out.print(valor / 10 + "x de 10R$,");
			valor = valor % 10;
		}
		if (valor >= 5) {
			System.out.print(valor / 5 + "x de 5R$,");
			valor = valor % 5;
		}
		if (valor >= 1) {
			System.out.print(valor + "x de 1R$.");
		}		
		
	}
}
P

entao , nesse ultimo codigo o valor de 257 ele funciona corretamente , ai eu aumento o valor do caixa por exeplo pra 357 ou + só mudando o 1º numero ele funciona corretamente , porem se eu mudar o 2º numero ele buga , botei o valor do caixa para 337 e o resultado foi o seguinte:

/\ passou o valor de 337.

J

ops pequeno erro de digitacao … copia denovo e testa

abs

P

muito obrigado em amigo,funcionou 100%. Eu não gosto de simplismente copiar e entregar porem esse professor só manda fazer exercicios sem ensinar o conteudo antes , a turma toda está reclamando dele, até acho que vou mudar de turno para trocar de professor.

até mais e boa noite.

Criado 18 de maio de 2012
Ultima resposta 18 de mai. de 2012
Respostas 9
Participantes 3