Problema com conta de banco (Caelum)

8 respostas
ucastrobr

Estou na página 49 da apostila Caelum Java orientado a objetos e é essa é a minha segunda mensagem.
Primeiro vou mostrar o código depois o erro.

Código:
class Conta {
	int numero;
	String nome;
	String dono;
	double saldo;
	double limite;
	
	void saca(double quantidade) {
		double novoSaldo = this.saldo - quantidade;
		this.saldo = novoSaldo;}
		
		boolean Saca(double valor) { 
			if(this.saldo < valor ) {
			return false;}
			else{
			this.saldo = this.saldo - valor;
			return true;}
			}
			
		void deposita(double quantidade) {
			this.saldo = saldo + quantidade;}
			
		    void transfere(Conta destino, double valor){
			this.saldo = this.saldo -valor;
			destino.saldo = destino.saldo + valor;
			}
			  boolean Transfere(Conta destino, double valor) {
			    boolean retirou = this.saca(valor);
			    if (retirou == false) {
			    // não deu pra sacar!
			    return false;
			    }
			    else {
			    destino.deposita(valor);
			    return true;
			    }
			}
		   }
A saída é a seguinte:
ulycris@ulycris:~/caelum/Conta$ javac Conta.java
Conta.java:28: incompatible types
found   : void
required: boolean
                            boolean retirou = this.saca(valor);
                                                       ^
1 error

Já entendi que está dizendo que o trecho acima no código "[color=darkred]boolean retirou = this.saca(valor)[/color] " é imcopatível com boolean por ser um void ou método.
O problema é que não sei como corrigir.

8 Respostas

maquiavelbona

Assinaturas do métodos:
1.boolean Saca(double valor) {
2.void saca(double quantidade) {
Sua chamada:

boolean retirou = this.saca(valor);

Percebeste algo de diferente?

Até!

Rodrigo_Rocha_de_Mor

É, acho que ele disse tudo!

[]'s

ucastrobr

Obrigado maquiavelbona. Resolvido o código de conta acima o "saca" estava com letra minúscula o correto era:
boolean retirou = this.[color=darkred]Saca[/color](valor);

Mas tem um problema quando executo essa classe acima Conta em uma das minhas contas ele calcula saldo, deposito, tranferência. Só que se eu tiver como saldo inicial R$ 1000 e tentar sacar R$ 2000 ele não deixa, mas transferir ele deixa.
Veja o código:

class MinhasContas{
	public static void main (String [ ] args) {
		
	Conta minhaConta;
	minhaConta = new Conta( );
	
	Conta suaConta;
	suaConta = new Conta ( );
	
	minhaConta.nome = "Pedro Álvares Cabral";
	minhaConta.saldo= 1000;
	
	suaConta.nome = "Bush";
	suaConta.saldo= 5;
	
	suaConta.transfere(minhaConta,2000);		
	
	
	boolean consegui = minhaConta.Saca(2000);   
	if(consegui){                                             
	System.out.println("Consegui sacar");           
	}else{
	System.out.println("Não consegui sacar");}
	
	System.out.println("Meu saldo atual é : "+minhaConta.saldo);
	}
}
maquiavelbona

Dê uma olhadinha no método Saca e veja como ele trata a operação quando não é possível. Isso explica em parte pq o método saca não retorna e o Saca retorna algo.

Até!

caio_ferreira

kra, tbm estou estudando essa apostila, é como o amigo falou ai, esta acontecendo oq estava acontecendo com o metodo Saca(). Vc tem dois metodos transfere() e Transfere(), o Transfere() verifica se pode fazer a transferencia, o outro não, e vc esta usando o outro para testar.

ucastrobr
Valeu maquiavelbona e billcaio. Acho que daqui uns anos eu fico bom. heheehhehe! Por isso que meu avatar é um burro. Aqui tem os dois códigos corrigidos para alguém que passar pelo mesmo que eu. Se o moderador achar que está pesado os códigos é só dizer que eu retiro.
class Conta {
	int numero;
	String nome;
	String dono;
	double saldo;
	double limite;
	
	void saca(double quantidade) {
		double novoSaldo = this.saldo - quantidade;
		this.saldo = novoSaldo;}
		
		boolean Saca(double valor) { 
			if(this.saldo < valor ) {
			return false;}
			else{
			this.saldo = this.saldo - valor;
			return true;}
			}
			
		void deposita(double quantidade) {
			this.saldo = saldo + quantidade;}
			
		    void transfere(Conta destino, double valor){
			this.saldo = this.saldo -valor;
			destino.saldo = destino.saldo + valor;
			}
			  boolean Transfere(Conta destino, double valor) {
			    boolean retirou = this.Saca(valor);
			    if (retirou == false) {
			    // não deu pra sacar!
			    return false;
			    }
			    else {
			    destino.deposita(valor);
			    return true;
			    }
			}
		   }
class Programa {
	public static void main (String [ ] args) {
		
	Conta minhaConta;
	minhaConta = new Conta( );
	
	Conta suaConta;
	suaConta = new Conta ( );
	
	minhaConta.nome = "Ulysses de Castro";
	minhaConta.saldo= 1500;
	
	suaConta.nome = "Cristina";
	suaConta.saldo=1000;
	
	suaConta.Transfere(minhaConta,500);		
	
	
	boolean consegui = minhaConta.Saca(2000);//o algoritmo ficou class conta
	if(consegui){                           //se o valor do saque for maior
	System.out.println("Consegui sacar");  //que o saldo "não saca"
	}else{
	System.out.println("Não consegui sacar");}
	
	System.out.println("Meu saldo atual é : "+minhaConta.saldo);
	}
}
D4shxD

eu teria que fazer os 2 programas separados e usar um import ?

Ravnus

Sim e não!

Sim, se você estivesse usando C / C++!

Não, se você estiver usando Java.

No Java, quando você fizer uma chamada dentro de determinada classe à outra classe, o compilador irá procurar o arquivo .java dessa classe dentro do diretório do projeto.

Criado 17 de agosto de 2008
Ultima resposta 14 de dez. de 2010
Respostas 8
Participantes 6