Sou iniciante nao sei o que há de errado!

9 respostas
afonso_java
public class Nota {
	
	int Valor ;
	int Contador;
	
	
	public static void main(String[] args) {
		
		ArrayList<Nota> Cedulas = new ArrayList<Nota>();
		
		Nota Notade1 = new Nota();
		Cedulas.add(Notade1);
		Notade1.Valor = 1;
		Notade1.Contador = 0;
		
		Nota Notade2 = new Nota();
		Cedulas.add(Notade2);
		Notade2.Valor = 2;
		Notade2.Contador = 0;
		
		Nota Notade5 = new Nota();
		Cedulas.add(Notade5);
		Notade5.Valor = 5;
		Notade5.Contador = 0;
		
		Nota Notade10 = new Nota();
		Cedulas.add(Notade10);
		Notade10.Valor = 10;
		Notade10.Contador = 0;
		
		Nota Notade20 = new Nota();
		Cedulas.add(Notade20);
		Notade20.Valor = 20;
		Notade20.Contador = 0;
		
		Nota Notade50 = new Nota();
		Cedulas.add(Notade50);
		Notade50.Valor = 50;
		Notade50.Contador = 0;
		
		Nota Notade100 = new Nota();
		Cedulas.add(Notade100);
		Notade100.Valor = 100;
		Notade100.Contador = 0;
		
		
		int ValorTotal = 0;
		JOptionPane.showInputDialog(" Digite o valor a ser sacado ", ValorTotal);
		
		
		
		for (int indice = 0; indice < Cedulas.size(); indice++) {
			while (Notade100.Valor >= ValorTotal ){
					ValorTotal = ValorTotal - Notade100.Valor;
					Notade100.Contador = Notade100.Contador++;
			}
			while (Notade50.Valor >= ValorTotal ){
				ValorTotal = ValorTotal - Notade50.Valor;
				Notade50.Contador = Notade50.Contador++;
		}
			while (Notade20.Valor >= ValorTotal ){
				ValorTotal = ValorTotal - Notade20.Valor;
				Notade20.Contador = Notade20.Contador++;
		}
			while (Notade10.Valor >= ValorTotal ){
				ValorTotal = ValorTotal - Notade10.Valor;
				Notade10.Contador = Notade10.Contador++;
		}
			while (Notade5.Valor >= ValorTotal ){
				ValorTotal = ValorTotal - Notade5.Valor;
				Notade5.Contador = Notade5.Contador++;
		}
			while (Notade2.Valor >= ValorTotal ){
				ValorTotal = ValorTotal - Notade2.Valor;
				Notade2.Contador = Notade2.Contador++;
		}
			while (Notade1.Valor >= ValorTotal ){
				ValorTotal = ValorTotal - Notade1.Valor;
				Notade1.Contador = Notade1.Contador++;
		}
		
		}
	JOptionPane.showMessageDialog(null, 
		" Notas de 1 : " + Notade1.Contador +
		" Notas de 2 : " + Notade2.Contador +
		" Notas de 5 : " + Notade5.Contador +
		" Notas de 10 : " + Notade10.Contador +
		" Notas de 20 : " + Notade20.Contador +
		" Notas de 50 : " + Notade50.Contador +
		" Notas de 100 : " + Notade100.Contador);	
		
	}
	
	
}

A idéia seria um caixa eletronico para dispensar notas.
Tipo o valor colocado para retirada foi 200
ele daria
nota de 100 = 1
nota de 50 = 1
nota de 20 = 1
nota de 10 = 1
nota de 5 = 2
nota de 2 = 3
nota de 1 = 4

só que aparece tudo 0 as notas.
desculpem mais sou iniciante.

9 Respostas

F

Boa noite,

Já tive um problema parecido, tendo que tratar nulos do DAO, ignorando os valores que entravam nulos.

No contador, ao invés de colocar “Contador++”, tente colocar “++Contador”, ou na “mão” mesmo: “(Contador = Contador +1)”

Espero que ajude.

Abraço.

romarcio

Depois de criar o objeto Nota, você insere seus valores e então adiciona na lista Celulas.

Nota Notade1 = new Nota();  
Notade1.Valor = 1;  
Notade1.Contador = 0;
Cedulas.add(Notade1);
afonso_java
public class Nota {
	
	int Valor ;
	int Contador;
	
	
	public static void main(String[] args) {
		
		ArrayList<Nota> Cedulas = new ArrayList<Nota>();
		
		Nota Notade1 = new Nota();
		Notade1.Valor = 1;
		Notade1.Contador = 0;
		Cedulas.add(Notade1);
		
		Nota Notade2 = new Nota();
		Notade2.Valor = 2;
		Notade2.Contador = 0;
		Cedulas.add(Notade2);
		
		Nota Notade5 = new Nota();		
		Notade5.Valor = 5;
		Notade5.Contador = 0;
		Cedulas.add(Notade5);
		
		Nota Notade10 = new Nota();
		Notade10.Valor = 10;
		Notade10.Contador = 0;
		Cedulas.add(Notade10);
		
		Nota Notade20 = new Nota();
		Notade20.Valor = 20;
		Notade20.Contador = 0;
		Cedulas.add(Notade20);
		
		Nota Notade50 = new Nota();
		Notade50.Valor = 50;
		Notade50.Contador = 0;
		Cedulas.add(Notade50);
		
		Nota Notade100 = new Nota();
		Notade100.Valor = 100;
		Notade100.Contador = 0;
		Cedulas.add(Notade100);
		
		int ValorTotal = 0;
		JOptionPane.showInputDialog(" Digite o valor a ser sacado ", ValorTotal);
		
		
		
		for (int indice = 0; indice < Cedulas.size(); indice++) {
			while (Notade100.Valor >= ValorTotal ){
					ValorTotal = ValorTotal - Notade100.Valor;
					Notade100.Contador = Notade100.Contador + 1;
					
			}
			while (Notade50.Valor >= ValorTotal ){
				ValorTotal = ValorTotal - Notade50.Valor;
				Notade50.Contador = Notade50.Contador + 1;
				
		}
			while (Notade20.Valor >= ValorTotal ){
				ValorTotal = ValorTotal - Notade20.Valor;
				Notade20.Contador = Notade20.Contador + 1;
		}
			while (Notade10.Valor >= ValorTotal ){
				ValorTotal = ValorTotal - Notade10.Valor;
				Notade10.Contador = Notade10.Contador + 1;
		}
			while (Notade5.Valor >= ValorTotal ){
				ValorTotal = ValorTotal - Notade5.Valor;
				Notade5.Contador = Notade5.Contador + 1;
		}
			while (Notade2.Valor >= ValorTotal ){
				ValorTotal = ValorTotal - Notade2.Valor;
				Notade2.Contador = Notade2.Contador + 1;
		}
			while (Notade1.Valor >= ValorTotal ){
				ValorTotal = ValorTotal - Notade1.Valor;
				Notade1.Contador = Notade1.Contador + 1;
		}
		
		}
	JOptionPane.showMessageDialog(null, 
		" Notas de 1 : " + Notade1.Contador +
		" Notas de 2 : " + Notade2.Contador +
		" Notas de 5 : " + Notade5.Contador +
		" Notas de 10 : " + Notade10.Contador +
		" Notas de 20 : " + Notade20.Contador +
		" Notas de 50 : " + Notade50.Contador +
		" Notas de 100 : " + Notade100.Contador);	
		
	}
	
	
}

po fiz assim, gerou um numero na cedula 100 mais tipo
coloquei 40 e só de nota de 100 que foi = 21474837 (tem alguma coisa errada nao era nem pra entra o 100 se digitei 40)
o resto ta tudo 0 ainda.

S

romarcio:
Depois de criar o objeto Nota, você insere seus valores e então adiciona na lista Celulas.

Nota Notade1 = new Nota(); Notade1.Valor = 1; Notade1.Contador = 0; Cedulas.add(Notade1);

Faça isso que o amigo falou, mas também faça essas alterações aqui:

JOptionPane.showInputDialog(" Digite o valor a ser sacado ", ValorTotal);

Você precisa armazenar o valor que a pessoa digita, só com essa expressão do JOptionPane o ‘ValorTotal’ não está sendo salvo, ou seja, ele está com valor 0.

Vamo salvá-lo:

int ValorTotal = 0; String valor; valor = JOptionPane.showInputDialog("Digite o valor a ser sacado", ValorTotal); ValorTotal = Integer.parseInt(valor);

O JOptionPane retorna uma String pra gente, o que eu fiz aqui foi pegar uma String e converte-la para um int.

Agora que temos o valor correto do ‘ValorTotal’ vamos fazer algumas alterações dentro dos whiles.

while (Notade100.Valor >= ValorTotal ){ ValorTotal = ValorTotal - Notade100.Valor; Notade100.Contador = Notade100.Contador++; }

Aqui a condição está errada, pois o Notade100. Valor vai acabar sendo sempre maior que o ValorTotal, aí você caí num loop infinito.

Outro problema é na hora de incrementar o contador. Fazendo da maneira acima, o contador vai ficar sempre com o mesmo valor.
Isso acontece por causa da posição do incremento.

Faça as alterações em todos os whiles e seu código vai funfar =)

while (ValorTotal >= Notade50.Valor ){ ValorTotal = ValorTotal - Notade50.Valor; Notade50.Contador++; }

Qualquer dúvida estamos aí.

abrasss

Algumas coisas relacionadas ao JOptionPane eu achei aqui: http://www.guj.com.br/java/155551-duvidas-sobre-joptionpane

A

“Notade100.Valor >= ValorTotal”

Não sou o google, mas vc não quis dizer: “Notade100.Valor <= ValorTotal”??

ele vai sempre parar aí quando o ValorTotal for menor que 100!!

E na verdade ele deveria parar aí apenas quando o ValorTotal for maior que 100!!!

Dá uma olhada nas condições de todos os seus while’s!!!

Acredito que seja esse o problema!!

ahh… uma dica:

Usa a primeira letra maiúscula apenas no nome da classe:

public class Nota { //código da classe / métodos e atributos... }

em atributos e métodos, inicie com letra minúscula:

ArrayList<Nota> cedulas = new ArrayList<Nota>();

ou

public void cadastrarClientes (Cliente c) { //código do método... }

Isso facilita o entendimento do código!!

Abraços e boa sorte com o Java!!!

Rezende

Procure trocar o

while (Notade50.Valor >= ValorTotal ){   
                ValorTotal = ValorTotal - Notade50.Valor;   
                Notade50.Contador = Notade50.Contador + 1;

por

while(ValorTotal % Notade50.Valor == 0){
                ValorTotal -=Notade50.Valor;
                 Notade50.Contador += 1;

se quiser mandar o codigo inteiro e as classes para mim tentar montar o exercicio, eu posso tentar resolver o problema…

Elizeu_Santos

primeiro altere o valor

afonso_java
public class Nota {
	
	int Valor ;
	int Contador;
	
	
	public static void main(String[] args) {
		
		ArrayList<Nota> cedulas = new ArrayList<Nota>();
		
		Nota Notade1 = new Nota();
		Notade1.Valor = 1;
		Notade1.Contador = 0;
		cedulas.add(Notade1);
		
		Nota Notade2 = new Nota();
		Notade2.Valor = 2;
		Notade2.Contador = 0;
		cedulas.add(Notade2);
		
		Nota Notade5 = new Nota();		
		Notade5.Valor = 5;
		Notade5.Contador = 0;
		cedulas.add(Notade5);
		
		Nota Notade10 = new Nota();
		Notade10.Valor = 10;
		Notade10.Contador = 0;
		cedulas.add(Notade10);
		
		Nota Notade20 = new Nota();
		Notade20.Valor = 20;
		Notade20.Contador = 0;
		cedulas.add(Notade20);
		
		Nota Notade50 = new Nota();
		Notade50.Valor = 50;
		Notade50.Contador = 0;
		cedulas.add(Notade50);
		
		Nota Notade100 = new Nota();
		Notade100.Valor = 100;
		Notade100.Contador = 0;
		cedulas.add(Notade100);
		
		int ValorTotal = 0;
		String valor;
		valor = JOptionPane.showInputDialog(" Digite o valor a ser sacado ", ValorTotal);
		ValorTotal = Integer.parseInt(valor);
		if (ValorTotal > 1000){
			JOptionPane.showMessageDialog(null, "O limite de saque do dia é de 1000 reais");
			}
		else {
		
		for (int indice = 0; indice < cedulas.size(); indice++) {
			while (Notade100.Valor <= ValorTotal ){
					ValorTotal = ValorTotal - Notade100.Valor;
					Notade100.Contador = Notade100.Contador + 1;
					
			}
			while (Notade50.Valor <= ValorTotal ){
				ValorTotal = ValorTotal - Notade50.Valor;
				Notade50.Contador = Notade50.Contador + 1;
				
		}
			while (Notade20.Valor <= ValorTotal ){
				ValorTotal = ValorTotal - Notade20.Valor;
				Notade20.Contador = Notade20.Contador + 1;
		}
			while (Notade10.Valor <= ValorTotal ){
				ValorTotal = ValorTotal - Notade10.Valor;
				Notade10.Contador = Notade10.Contador + 1;
		}
			while (Notade5.Valor <= ValorTotal ){
				ValorTotal = ValorTotal - Notade5.Valor;
				Notade5.Contador = Notade5.Contador + 1;
		}
			while (Notade2.Valor <= ValorTotal ){
				ValorTotal = ValorTotal - Notade2.Valor;
				Notade2.Contador = Notade2.Contador + 1;
		}
			while (Notade1.Valor <= ValorTotal ){
				ValorTotal = ValorTotal - Notade1.Valor;
				Notade1.Contador = Notade1.Contador + 1;
		}
		
		}
		
	JOptionPane.showMessageDialog(null, 
		" Notas de 1 : " + Notade1.Contador +
		" Notas de 2 : " + Notade2.Contador +
		" Notas de 5 : " + Notade5.Contador +
		" Notas de 10 : " + Notade10.Contador +
		" Notas de 20 : " + Notade20.Contador +
		" Notas de 50 : " + Notade50.Contador +
		" Notas de 100 : " + Notade100.Contador);	
		
	}
	
	}
}

Valeu galera, muito obrigado!!!
faltava converte o string,(parseInt) tinha esquecido que JOptionpane só pega tipo string.
obs: o sinal eu tinha invertido, foi erro bobo mesmo, depois fui ver que tinha feito errado.

afonso_java

Por acaso teria como fazer rodar o software e o Cash Dispenser reconhecer ?

Tipo Saquei 20 $$ ele da uma de 20 ou duas de 10 etc…

vi que a maioria dos Cash tem conexao rs 232

se alguem souber responde ai por favor, cansei de procurar na net nao acho nada sobre isso.

Criado 27 de abril de 2011
Ultima resposta 29 de abr. de 2011
Respostas 9
Participantes 7