While, if ou o quê?

5 respostas
samsg
Olá pessoal... Tenho a seguinte classe, que possue um método deposita();
import java.util.*;
public class Conta {
	int numeroConta;
	String nomeCliente;
	double saldo;
	double limite;
	void deposita(){
		Scanner valor = new Scanner(System.in);
		System.out.println("Especifique um valor para depósito");
		double quantia = valor.nextDouble();
		if(quantia <=0){
			System.out.println("Especifique um valor válido");

		}else{
		double novosaldo=this.saldo + quantia;
		this.saldo = quantia;
		System.out.println("Seu saldo é de R$" + saldo);
		}
		}

Porém, reparem que no if(linha 11) e else(linha 14):
Se eu especificar um valor <0 é exibida a mensagem...e fica nisso mesmo(Porque eu nao sei que código colocar). Eu gostaria de uma ajuda, um exemplo ou o que for....pois eu queria que quando a pessoa colocasse uma quantia <0...exibisse a mensagem e voltasse para o início do método deposita()...

T+ e mto obrigado

5 Respostas

nosredna
import java.util.*;
public class Conta {
	int numeroConta;
	String nomeCliente;
	double saldo;
	double limite;
	void deposita(){
                Boolean x = true;
		Scanner valor = new Scanner(System.in);
		System.out.println("Especifique um valor para depósito");
		double quantia = valor.nextDouble();
                // Existe formas mais elegantes de se fazer isso, mas vou colocar algo bem rapido
                fimLoop:
                while(x){
		if(quantia > 0){
			break fimLoop;
		}else {
                 System.out.println("Especifique um valor válido");
                }
                }
		double novosaldo=this.saldo + quantia;
		this.saldo = quantia;
		System.out.println("Seu saldo é de R$" + saldo);
                }

		}

Bom é uma POG, amanhã se lembrar venho aqui colocar algo mais legal... Sono esta pegando!!!

ViniGodoy

Separe em funções. Fica mais organizado e mais elegante:

import java.util.*;  

public class Conta {
    private int numeroConta;  
    private String nomeCliente;  
    private double saldo;  
    private double limite;  

    private boolean realizaDeposito(double quantia) {
        if(quantia <=0) {
            System.out.println("Especifique um valor válido");  
            return false;
        }
        this.saldo += quantia;  
    }

    void deposita(){  
        System.out.println("Especifique um valor para depósito");  
        do {
            Scanner valor = new Scanner(System.in);  
            System.out.println("Especifique um valor para depósito");              
        } while (!realizaDeposito(valor.nextDouble()));
        System.out.println("Seu saldo é de R$" + saldo);
    }
}

O ideal meeesmo é que o método realizaDeposito fosse o método deposita. E, ao invés de escrever diretamente o erro na tela e retornar um bool, ele lançasse uma exceção de IllegalArgumentException. O seu código que questiona o usuário e faz as tarefas de GUI estaria na classe que usa a conta. Assim ficaria fácil de vc mudar esse sistema para o Swing, se vc quisesse depois. Via de regra as classes de negócio (como conta), devem conter lógica de negócio, e nada mais.

FilhoDoRei
do {
            Scanner valor = new Scanner(System.in);  
            System.out.println("Especifique um valor para depósito");              
            double quantia = valor.nextDouble(); 
        } while (!realizaDeposito(quantia)); // aqui
        System.out.println("Seu saldo é de R$" + saldo);

pra ficar bão faltou so um parametro [color=red]quantia[/color].

flwsss

ViniGodoy

Tem razão, já corrigi lá em cima.

É que eu não compilei o programa. :stuck_out_tongue:

samsg

Muito obrigado pessoal…sou novo no fórum e realmente esse é o melhor fórum sobre java…
Respostas e Soluções imediatas…
Valeu!!!
T+

Criado 2 de agosto de 2008
Ultima resposta 3 de ago. de 2008
Respostas 5
Participantes 4