Caixa Eletronico (Trabalho da Facul)

50 respostas
K

Galera, sou iniciante, e meu professor pediu pra elaborarmos um caixa eletronico q crie uma string para armazenar as notas de 100,50,20,10,5 e 2, o meu maior problema esta na hora do saque, pois terei que verificar se o valor pode pagar das notas mais altas para as menores, porem como o caixa nao tem nota de um, tenho um problema, pois valores terminados com 1,3, 6 e 8 se tornam praticamente impossiveis de se sacar, pois 1 e 3 naum podera sacar nota de 5 nem de 2, e o 6 e o 8 , vc consegue sacar 5, mas naum tem como sacar 2 pois volta ao problema do 1 e 3, então teria que fazer ele verificar e pular alguma nota para que possa ser sacado, tornando impossivel apenas ser sacado os valores 1 e 3, sendo portanto possivel sacar valores como 11,13, 16, 18 e por ae vai.
Desde ja agradeço a atenção e a ajuda de todos

50 Respostas

Lavieri

esse exercicio das notas, ja rolou varias vezes aki no forum, da um search, q c axa ^^ google…

K

ja fiz isso, mas ninguem soube me ajudar, pois ja fiz td oq axei nos foruns da vida e mesmo assim continua naum dando certo

B

Tá aí um problema de caixa eletrônico que não se vê todo dia.

Eu pensaria em resolver o último digito de duas formas, normal com notas de 5 e 2, ou somente com notas de 2. Caso a simulação normal dê certo, use ela, caso contrário faça a simulação de somente notas de 2. Caso não dê certo com nenhuma das duas, aborte a operação de saque e fale que não há dinheiro o suficiente em caixa.

K

o problema eh q teria que fazer a verificação se eh possivel pagar com notas de 5, caso naum seja, pular para as notas de 2,

e eh isso q naum estou conseguindo fazer

K

eu naum kero o codigo em si, queria a logica pra q eu possa desenvolver o codigo

W

Teste isso para ver se ajuda… fiz rapidinho aki, deverá fazer algumas melhorias…

import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class CaixaEletronico {
	private final Integer[] notas = new Integer[] { 100, 50, 20, 10, 5, 2 };
	private int valorSaque = 0;
	
	public int getValorSaque() {
		return valorSaque;
	}

	public void setValorSaque(int valorSaque) {
		this.valorSaque = valorSaque;
	}

	public List<Integer> getNotas() {
		return Collections.unmodifiableList(Arrays.asList(notas));
	}

	private boolean sacar(final Integer valor) {
		if(valor <= 0) {
			throw new IllegalArgumentException();
		}
		boolean status = false;
		int resto = valor % 100;
		if((resto) == 0 || 
				((resto = valor % 50) == 0) || 
				((resto = valor % 20) == 0) || 
				((resto = valor % 10) == 0) || 
				((resto = valor % 5) == 0) || 
				((resto = valor % 2) == 0)) {
			status = true;
		}
		return status;
	}

	public static void main(String[] args) {
		CaixaEletronico caixaEletronico = new CaixaEletronico();
		boolean status = false;
		for(int i = 1; i < 500; i++) {
			status = caixaEletronico.sacar(i);
			System.out.println(i + " = " + (status ? "Saque permitido." : "Não é possivel sacar esse valor."));
		}
	}
}
K

não deu certo kra, mas vlw a ajuda

K

o codigo ateh funciona, mas naum atende as necessidades que o professor exigiu, pois não posso criar novos metodos, tenho q usar os q ele ja disponibilizou e naum posso usar nem get nem set, e tem uma coisa nova q soh descobri hj, pois faltei na aula q ele passou o exercicio, que eh limite de notas, no maximo 30 notas por saque.

B

Poderia então postar o código que já fez, baseado nessas regras?

Lavieri

resolvendo seu problema…

a saber que… o único numero impar que vc dispoem é o 5… portanto… se tiver impar, vc deverá retirar apenas 1 nota 5, assim o numero vira par… e depois so fazer a conta normalmente que vc nunca tera problemas

K

o problema eh, tenho 53, dou uma nota de 50 e naum tenho como dar nota de 3, entao teria q dividir os 50 tbm.

Lavieri

esse é o erro… 53 é impar… então primeiro vc da 1 nota de 5… depois faz a conta do resto, depois disso vc não da + notas 5…

… vamos as contas

53 é impar… então

1 nota 5…

sobram 48 …

2 notas de 20

sboram 8 … (lembre-se que não há mais notas de 5 a fornecer)

4 notas de 2

pronto ta ai a resposta…

2x20 + 1x5 + 4x2 = 53

K

Bruno, a parte de saque eu naum consegui fazer ainda, tah mto dificil mesmo, amanha posto aki o enunciado do problema.

desde ja muito obrigado a todos pela ajuda

K

uma das exigencias do professor eh q comesse sempre pela maior nota, por exemplo, se for 53, como naum posso dar 50, a 1º nota teria q ser 20 e ae por diante

Lavieri

duvida, vc tem limite de notas de algum valor ?

Lavieri
kdt:
uma das exigencias do professor eh q comesse sempre pela maior nota, por exemplo, se for 53, como naum posso dar 50, a 1º nota teria q ser 20 e ae por diante

hora vc esta começando pela nota + alto... mas pela nota + alta possivel... e esse é o seu problema... vc tem que entender que não há como contabilizar números impares, exceto usando a nota 5

tenho certeza, que o que seu professou quis falar é... dê a maior combinação possivel de notas, e diante das suas possibilidades, é assim que se faz a conta

...........

vc deve fazer é... se (1) ou (3) então Impossivel contabilizar

se impar ... restante -= 5; e numeroDe5=1;

depois vai fazer....

numeroDe50 = restante/50;
restante -= numeroDe50 * 50;

numeroDe20 = restante/20;
restante -= numeroDe20 * 20;

numeroDe10 = restante/10;
restante -= numeroDe10 * 10;

numeroDe2 = restante/2;
restante -= numeroDe2 * 2;
K

tenho o limite de 30 notas por saque, e tipo o caixa ja tem uma quantidade de notas carregadas.

teria q ser algo +/- assim.

53 > 50 (ok)
53 - 50 = 3 (erro)
53 > 20 (ok)
53 - 20 = 33 (ok)
33 > 20 = 13 (ok)
33 - 20 = 13 (ok)
13 >= 10 (ok)
13 - 10 = 3 (erro)
13 >= 5 (ok)
13 - 5 = 8 (ok)
8 >= 5 (ok)
8 - 5 = 3 (erro)
8 >= 2 (ok)
8 - 2 = 6 (ok)
6 >= 5 (ok)
6 - 5 = 1 (erro)
6 >= 2 (ok)
6 - 2 = 4 (ok)
4 >= 2 (ok)
4 - 2 = 2 (ok)
2 >= 2 (ok)
2 - 2 = 0

K

o problema tah sendo pra fazer essa conta
como fazer pra ele pular determinados valores e ao mesmo tempo naum deixar sacar mais de 30 notas

Lavieri
<blockquote><div class="quote-author">kdt:</div>53 > 50 (ok)

53 - 50 = 3 (erro)

53 > 20 (ok)

53 - 20 = 33 (ok)

33 > 20 = 13 (ok)

33 - 20 = 13 (ok)

13 >= 10 (ok)

13 - 10 = 3 (erro)

13 >= 5 (ok)

13 - 5 = 8 (ok)

8 >= 5 (ok)

8 - 5 = 3 (erro)

8 >= 2 (ok)

8 - 2 = 6 (ok)

6 >= 5 (ok)

6 - 5 = 1 (erro)

6 >= 2 (ok)

6 - 2 = 4 (ok)

4 >= 2 (ok)

4 - 2 = 2 (ok)

2 >= 2 (ok)

2 - 2 = 0

</blockquote>

vamos a conta ??

20 x 2
5x1
2x4

tadan… vc xegou no mesmo resutaldo… porem com um comportamento que gasta muito mais processo, sem sentido… o.O … vc q sabe como quer fazer

… o fato é… o único numero impar q vc tem é o um 5… tem impar, vai ter q tirar a nota 5… depois faz as contas normais, q tudo dará certo…

Lavieri

esse processo que vc colocou…

olhar para 53, sabendo que vai ter q tirar um 5… e ficar tentando tirar 50, vendo q não da… depois tirar 20 e 20, e tentar tirar 10, vendo que não vai dar… pra só ai tirar o 5, é algo q axo sem sentido… qualquer número impar, vc vai tirar um 5, e apenas um 5…

a não ser que vc tenha limite de cada uma das notas, ai vc terá que saber, que pra sua conta da certo, depois q tirar 1x5, depois so poderar tirar eles em pares, para manter a conta final em um número impar

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

public class Testes {
    public static void main(String[]args){
        int valor=288 ,p;
        List<Integer> notas =new ArrayList<Integer>();

        if(String.valueOf(valor).length()>=3){
            p=valor/100;
            for(int i=0;i<p;i++)notas.add(100);
            valor=valor%100;
        }
        if((String.valueOf(valor).length()==2) && ((Integer.parseInt(String.valueOf(valor).substring(0,1)))>=5)){
            p=valor/50;
            for(int i=0;i<p;i++)notas.add(50);
            valor=valor%50;
        }
        if((isPar((Integer.parseInt(String.valueOf(valor).substring(0,1)))))==true){
            p=valor/20;
            for(int i=0;i<p;i++)notas.add(20);
            valor=valor%20;
        }
        if(String.valueOf(valor).length()==2){
            p=valor/10;
            for(int i=0;i<p;i++)notas.add(10);
            valor=valor%10;
        }
        if(valor>=5){
            p=valor/5;
            for(int i=0;i<p;i++)notas.add(5);
            valor=valor%5;
        }
        if(valor%2==0){
            p=valor/2;
            for(int i=0;i<p;i++)notas.add(2);
            valor=valor%2;
        }


      if(((String.valueOf(valor).substring(0,1)).equals("1")) || ((String.valueOf(valor).substring(0,1)).equals("3")) || ((String.valueOf(valor).substring(0,1)).equals("6")) || ((String.valueOf(valor).substring(0,1)).equals("8"))){
          int sumNota=0;
          for(int i:notas)sumNota+=i;
          System.out.println("O valor digitado não pode ser sacado \nsugestão de valor: "+sumNota);
      }else{
        System.out.println(notas);
    }
    }
    static boolean isPar(int val){
        return ((val%2==0)? true:false);
    }

}

Espero ter ajudado...

OBSERVAÇÃO: se no seu codigo, inserir o valor em uma string pode economiza com String.valueOf(), lembrando que assim teria de retornar o valor da string para o proximo teste e não com fiz, retornando o valor inteiro. :?

Lavieri

o que vc precisa responde é… seu caixa eletronico é real ?? ele tem limites de notas dentro dele ?? ou vc pode conciderar que as notas dentro do caixa rapido são infintos ??se forem infinitos, faz as contas como te falei, no fim, ve se tem + de 30 notas, se tiver, diz q o saldo não é permitido por excesso de notas… e pronto ta feito seu programa…

se teu programa tiver limite de notas, vc precisa ter recipient contabilizar elas… e a diferença… é que as notas cinco, terão comportamento especial, quando vc tiver tratando impares e pares…

se o numero for impar… vc só pode ter notas cinco em somas impares… 1 nota, 3 notas, 5 notas, 7 notas … etc
se o numero for par … vc só pode ter notas cinco em somas pares… 0 notas, 2 notas, 4 notas, 6 notas…

pode ter certeza… quando for impar… conte primeiro a 1° nota 5, depois faça o resto das contas… e seja feliz

Obs.: essa parte de contagem de notas, tem milhoes de exemplos aki no guj… e a unica diferença pro seu problema é essa questão de impar/par para a nota 5

adriano_si

Cara… põe o enunciado aí… vou quebrar cabeça com essa birosca aqui… gostei do desafio…

Falows :wink:

pmlm

Quebrar a cabeça?

Se é impar dá 5, se não é não dá.

De resto faz uma divisão normal com as notas de 100, 50, 20, 10 e 2

Lavieri

adriano_si:
Cara… põe o enunciado aí… vou quebrar cabeça com essa birosca aqui… gostei do desafio…

Falows ;)

poem ai o enunciado ?? e enunciado esta no 1° post … O.o

adriano_si

Aquele lá é o enunciado completo ??? Então blz…

adriano_si

pmlm:
Quebrar a cabeça?

Se é impar dá 5, se não é não dá.

De resto faz uma divisão normal com as notas de 100, 50, 20, 10 e 2

Não lí e nem vou ler… hehehehehe por isso falei em quebrar a cabeça, com o enunciado vou tentar fazer do zero, tendo em vista que ainda nem pensei numa solução, ví o problema, achei legal, ainda não pensei em nada e imaginei que o enunciado era alguma coisa mais elaborda do que… sei lá, quero fazer assim e assado, mas o que o professor quer na verdade é… etc. etc.

Mas valew, acho que com o que está no 1º post dá pra fazer…

Fui :wink:

DavidUser

ops! Ta ai agora sem bugs:

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

public class CaixaEletronico {
    public static void main(String[]args){
        int valor=3 ,p;
        List<Integer> notas =new ArrayList<Integer>();

        if(String.valueOf(valor).length()>=3){
            p=valor/100;
            for(int i=0;i<p;i++)notas.add(100);
            valor=valor%100;
        }
        if((String.valueOf(valor).length()==2) && ((Integer.parseInt(String.valueOf(valor).substring(0,1)))>=5)){
            p=valor/50;
            for(int i=0;i<p;i++)notas.add(50);
            valor=valor%50;
        }
        if((isPar((Integer.parseInt(String.valueOf(valor).substring(0,1)))))==true){
            p=valor/20;
            for(int i=0;i<p;i++)notas.add(20);
            valor=valor%20;
        }
        if(String.valueOf(valor).length()==2){
            p=valor/10;
            for(int i=0;i<p;i++)notas.add(10);
            valor=valor%10;
        }
        if(valor>=5){
            p=valor/5;
            for(int i=0;i<p;i++)notas.add(5);
            valor=valor%5;
        }
        if((String.valueOf(valor).length()==1) && (valor>=2)){
            p=valor/2;
            for(int i=0;i<p;i++)notas.add(2);
            valor=valor%2;
        }


      if(((String.valueOf(valor).substring(0,1)).equals("1")) || ((String.valueOf(valor).substring(0,1)).equals("3")) || ((String.valueOf(valor).substring(0,1)).equals("6")) || ((String.valueOf(valor).substring(0,1)).equals("8"))){
          int sumNota=0;
          for(int i:notas)sumNota+=i;
          System.out.println("O valor digitado não pode ser sacado \nsugestão de valor: "+sumNota);
      }else{
        System.out.println(notas);
    }
    }
    static boolean isPar(int val){
        return ((val%2==0)? true:false);
    }

}

Testa ai! a lógica ta certa. Pode implementar agora a classe diacoro o uso. O quem fiz não foi nada mais que avaliar o problema parte por parte.
se quizer imprimir o número de notas é ainda mais fácio:
é so pegar o valor “p” que é a quantidade.

adriano_si

Outra forma… só não testei bastante e fiz rápido aqui no trampo, depois dou uma olhada com calma…

package caixaeletronico;

import java.util.ArrayList;
import javax.swing.JOptionPane;

public class Main {

    static String[] notas = {"100","50","20","10","5","2"};
    static ArrayList notasUsadas = new ArrayList();
    static int valorResult;

    public static void main(String[] args) {

        // Vou considerar so inteiros por nao ter enunciado exato.
        int valorSacar = Integer.parseInt(JOptionPane.showInputDialog(null, "Entre com o valor para saque"));

        sacar(valorSacar);

        for(int i = 0; i < notasUsadas.size(); i++) {
            System.out.println(notasUsadas.get(i));
        }
    }

    static void sacar(int valorSacar) {

        valorResult = valorSacar;

        // So faz alguma coisa se o Usuario quiser sacar no minimo R$ 10,00
        // Convençao minha
        if(valorSacar >= 10) {
                while(valorResult >= 100 && verificaMod(valorResult, 100)) {
                        notasUsadas.add(notas[0]);
                        valorResult -= 100;
                }

                while(valorResult >= 50 && verificaMod(valorResult, 50)) {
                        notasUsadas.add(notas[1]);
                        valorResult -= 50;
                }

                while(valorResult >= 20 && verificaMod(valorResult, 20)) {
                    notasUsadas.add(notas[2]);
                    valorResult -= 20;
                }

                while(valorResult >= 10 && verificaMod(valorResult, 10)) {
                    notasUsadas.add(notas[3]);
                    valorResult -= 10;
                }

                while(valorResult >= 5 && verificaMod(valorResult, 5)) {
                    notasUsadas.add(notas[4]);
                    valorResult -= 5;
                }

                while(valorResult >= 2 && verificaMod(valorResult, 2)) {
                    notasUsadas.add(notas[5]);
                    valorResult -= 2;
                }
        }
    }

    static boolean verificaMod(int resultado, int base) {
        int valor = resultado % base;
        if((valor == 1 || valor == 3) && (resultado/2) < (base)) {
            return false;
        } else {
            return true;
        }
    }
}

Qualquer melhoria… podem postar…

adriano_si

Ah sim… não usei o for aperfeiçoado porque estava marcando um tracinho vermelho na compilação do NetBeans e não tava com saco pra verificar o porque…

Falows :wink:

adriano_si

David… não gostei de sua solução por eu não poder sacar valores impares… acho que não era bem isso que ele queria… Ele queria que as notas fossem combinadas de uma forma tal que qualquer valor pudesse ser sacado, sempre dizendo primeiro qual a maior nota, pra depois dizer quais as menores…

Não sei, acho que entendi errado então… quando chegar em casa avalio melhor…

Abraços :wink:

adriano_si

Consertei agora…

Aqui…

static ArrayList<String> notasUsadas = new ArrayList();

e Aqui…

for(String lista : notasUsadas) { System.out.println(lista.toString()); }

FALOWS :wink:

adriano_si

nmelhr ainda no lugar do For… Agora vou trabalhar que o chefe já tá mandando trampo pra KCTI aqui…

JOptionPane.showMessageDialog(null, "Valor Sacado: " + valorSacar + "\nRetire seu dinheiro: " + notasUsadas.toString());

Abraços :wink:

jcmird

Amigo da uma olhada no código que eu fiz, os unicos valores que impossivel para saque é valor 1 e 3. Todos os demais são possiveis, para valores maiores que 10 terminado em 3 ou 1, o código faz o seguinte no caso de terminado 3 o
algoritmo deduz 5 do valor, teremos uma nota 5 para esse valor. E no caso de terminar em 1 deduz 6 teremos 3 notas de 2 nesse valor.

import java.util.Scanner;

public class Saque {
	private final Integer[] notas = new Integer[] { 100, 50, 20, 10, 5, 2 };
	private int valor;

	public int getValor() {
		return valor;
	}

	public void setValor(int valor) {
		this.valor = valor;
	}

	public String sacar() {
		String mostraNota = "";
		int resultado = 0;
		int divisao = 0;

		if (valor == 1 || valor == 3)
			return "Valor de saque invalido";
		for (Integer nota : notas) {
			if (valor >= nota) {
				resultado = valor % nota;
				divisao = valor / nota;
				if (resultado != 3 && resultado != 1) {
					mostraNota += " " + (valor / nota) + "x" + nota;
					valor = valor - (nota * (valor / nota));
				}
				if (nota >= 10 && resultado == 3) {
					valor = valor - 5;
					mostraNota += " " + "1x5";

				}

				if (nota >= 10 && resultado == 1) {
					valor = valor - 6;
					mostraNota += " " + "3x2";

				}

			}
		}
		return mostraNota;
	}

	public static void main(String args[]) {
		int valor = 1000;
		Saque saque = new Saque();
		Scanner scanner = new Scanner(System.in);
		while (valor != 0) {
			System.out.println("Digite um Valor ou 0 para sair:");
			valor = scanner.nextInt();
			if (valor != 0) {
				saque.setValor(valor);
				System.out.println(saque.sacar());
			}
		}

	}
}
adriano_si

JCMIRD, seu algoritmos com valores acima de 200, por exemplo, 1001, 201, 603, simplesmente ignora as notas de 100…

Dá uma verificada aí…

Falows :wink:

Lavieri

eu fico impressionado como vcs conseguem fazer um programa 0% OO (Orientado a Objetos)

adriano_si

Faça um e seja feliz… só creio que para a situação, era disso que ele estava precisando… bom não vou perder meu tempo com isso, mas se incomodar, faz aí…

Abraços :wink:

Lavieri

Faça um e seja feliz… só creio que para a situação, era disso que ele estava precisando… bom não vou perder meu tempo com isso, mas se incomodar, faz aí…

Abraços ;)

para situação o q precisava era uma ajuda pra conseguir iniciar, e não que alguem fizesse pela pessoa… agora c for fazer, que se faça com conceitos OO… e não uma linha procedura… eu axo impressionante como muita gente ainda continua pensando e escrevendo programas sem nem ao menos dividir corretamente as responsabilidades em métodos e essas coisas…

o.O … ainda mais quando esta se tentando ajudar alguem q esta iniciando, ai sim, que tem mesmo q mostrar com fazer com conceitos OO

adriano_si

para situação o q precisava era uma ajuda pra conseguir iniciar, e não que alguem fizesse pela pessoa… agora c for fazer, que se faça com conceitos OO… e não uma linha procedura… eu axo impressionante como muita gente ainda continua pensando e escrevendo programas sem nem ao menos dividir corretamente as responsabilidades em métodos e essas coisas…

o.O … ainda mais quando esta se tentando ajudar alguem q esta iniciando, ai sim, que tem mesmo q mostrar com fazer com conceitos OO

Ok…

jcmird

Lavieri neste tópico estamos discutindo a logica que seria aplicado no problema em questão, conforme o autor do tópico disse. Pelo que entendi ele está começando e sim interessante ele aprender O.O, mas primeiro vem a lógica. A intenção desse tópico nao é discutir boas praticas de programação…

jcmird

Teste aquui tá rolando … conversa tipica de programador kkkkkkkkkk … será que tem algum bug que deixei passar … vou ver aqui e já falo…

abs

DavidUser

funciona da mesma forma que o meu, mas nescessita da implementação de mais um array, desvantagens em tempo de execução: você utiizou um método de orientação a objeto, isso almenta o tempo de execução, pois exige que seja buscado um endereço de memória para o início da ação, no caso a diferença não é notável pois esse requerimento é para uma interface de pequeno porte.
O uso da POO facilita a vizualização e manutenção do código, mas diminui a eficiência do software principalmente quando o mesmo tem objetivo de realizar operações matemáticas.

O professor não deu escolha para o tamanho mínimo então temos de implementar um codigo que atenda as nescesidades do mesmo, inferir no tamanho mínimo não interfere tenha como exemplo o número 123.00

mesmo maior que 10 não possui como imprimir as sedulas de forma redonda, no caso sua idéia deve seguir a configuração de alguns bancos como o Bradesco, o correto seria inserir uma máscara que infira todos os valores com terminação 0.00, oque tambem limita e bastante a ação do usuário, preferi esconher pelo método de sugestão.

Boa Programação! Você seguiu seriamente as convenções de código mas tente reduzir fórmulas exemplo:
em seu método verificaMod o return poderia ser resumido em:

return (((valor == 1 || valor == 3) && (resultado/2 < base))? true:false);
J

realmente, otimizacao vai para outro tópico :wink:
rsrsrs

jcmird

Galera daqui pouco esses codigos vao parar no topico de codigos toscos do guj
kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk

Lavieri

DavidUser:
funciona da mesma forma que o meu, mas nescessita da implementação de mais um array, desvantagens em tempo de execução: você utiizou um método de orientação a objeto, isso almenta o tempo de execução, pois exige que seja buscado um endereço de memória para o início da ação, no caso a diferença não é notável pois esse requerimento é para uma interface de pequeno porte.
O uso da POO facilita a vizualização e manutenção do código, mas diminui a eficiência do software principalmente quando o mesmo tem objetivo de realizar operações matemáticas.

o.O … qual o objetivo quando se programa em cima de um linguagem OO ?

Josueh:
…realmente, otimizar é bom… principalmente quando reduz linhas de código :wink:
hei!
retorna true se a expressao for true???
retorna false se a expressao for false???
??!???!
esse return poderia ser:

return ((valor == 1 || valor == 3) && (resultado/2 < base));

obs.: apenas uma dica :wink:

auahuahuahu retorno lendario esse de … return (isTrue()) ? true : false; lol!

huahua ai ai… esse código foi de raxar…

jcmird

kkkkkkkkkkkkkk … pior o q mais tem nesse topico sao esses retornos

http://www.guj.com.br/posts/list/600/30384.java#669953

K

Galera, vlw pela ajuda, consegui fazer o codigo

segue abaixo.

public String sacar(Integer valor) {
        String resposta = "";
        int calcular[] = new int[6];
        int simulacao[][] = new int[6][1];
        int contaNotas = 0, contaValorTotal = 0;
        int contador;

        resposta = "Impressão de Tipos e Quantidades\nde Cedulas Recebidas.\n";

         if (valor != 1 && valor != 3 && valor > 0) {
           
            for (contador = 0; contador < 6; contador++) {
                simulacao[contador][0] = valorInicial[contador][1];
                contaValorTotal += valorInicial[contador][0] * valorInicial[contador][1];
            }

          
            if (contaValorTotal > cotaMinima) {
          
                while (simulacao[0][0] != 0 && valor - 100 >= 0 && valor - 100 != 1 && valor - 100 != 3) {
                    valor -= 100;
                    calcular[0]++;
                    simulacao[0][0]--;
                }

                while (simulacao[1][0] != 0 && valor - 50 >= 0 && valor - 50 != 1 && valor - 50 != 3) {
                    valor -= 50;
                    calcular[1]++;
                    simulacao[1][0]--;
                }

                while (simulacao[2][0] != 0 && valor - 20 >= 0 && valor - 20 != 1 && valor - 20 != 3) {
                    valor -= 20;
                    calcular[2]++;
                    simulacao[2][0]--;
                }

                while (simulacao[3][0] != 0 && valor - 10 >= 0 && valor - 10 != 1 && valor - 10 != 3) {
                    valor -= 10;
                    calcular[3]++;
                    simulacao[3][0]--;
                }

                while (simulacao[4][0] != 0 && valor - 5 >= 0 && valor - 5 != 1 && valor - 5 != 3) {
                    valor -= 5;
                    calcular[4]++;
                    simulacao[4][0]--;
                }

                while (simulacao[5][0] != 0 && valor - 2 >= 0 && valor - 2 != 1 && valor - 2 != 3) {
                    valor -= 2;
                    calcular[5]++;
                    simulacao[5][0]--;
                }

  
                if (valor == 0) {

                    for (contador = 0; contador < 6; contador++) {
                        contaNotas += calcular[contador];
                    }


                    if (contaNotas <= 30) {
                        for (contador = 0; contador < 6; contador++) {
                            valorInicial[contador][1] -= calcular[contador];


                            if (calcular[contador] != 0) {
                                resposta += "   " +
                                        String.valueOf(calcular[contador]) +
                                        "    Nota(s) de    " +
                                        String.valueOf(valorInicial[contador][0]) +
                                        "\n";
                            }
                        }


                    } else {
                        resposta = "Excedido o Limite de Notas (30)!\n" +
                                " Efetue o Saque Novamente!";
                    }


                } else {
                    resposta = "Não Temos Nota Para Este Saque!";
                }

            } else {
                resposta = "Caixa Vazio: Chame o Operador!";
            }


        } else {
            resposta = "Valor Incorreto!\n" +
                    "Não Será Possível Efetuar o Saque!";
        }


        return resposta;
    }
Lavieri

use o a tag [code] circudando seu código, assim fica + legivel

DavidUser

Lavieri:
DavidUser:
funciona da mesma forma que o meu, mas nescessita da implementação de mais um array, desvantagens em tempo de execução: você utiizou um método de orientação a objeto, isso almenta o tempo de execução, pois exige que seja buscado um endereço de memória para o início da ação, no caso a diferença não é notável pois esse requerimento é para uma interface de pequeno porte.
O uso da POO facilita a vizualização e manutenção do código, mas diminui a eficiência do software principalmente quando o mesmo tem objetivo de realizar operações matemáticas.

o.O … qual o objetivo quando se programa em cima de um linguagem OO ?

O objetivo da implementação de um programa OO é facilitar a manutenção do mesmo, é utilizado em grandes projetos pois assim não seria nescessário a alteração em diversas classes, e sim apenas na classe desejada exemplo: se temos um banco de dados com funcionários de uma empresa, quando um destes for demitido, pode ser alterada a situação do mesmo por apenas um programador em uma única classe que é erdada por outras.

Grandes softwares nescessitão deste tipo de programação para ajudar em sua atualização e correção de bugs, como o exemplo não vai ser “atualizado”, e mesmo que fosse a linha de código é muito pequena. :-o

snowblacksoul

alguém pode enviar o programa para que eu possa estudar!
grato

Criado 17 de maio de 2009
Ultima resposta 8 de set. de 2009
Respostas 50
Participantes 10