Problema com conta de banco (Caelum)

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:

[code]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;
		    }
		}
	   }[/code]

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.

1 curtida

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é!

É, acho que ele disse tudo!

[]'s

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;

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:

[code]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);
}

}[/code]

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é!

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.

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.

[code]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;
		    }
		}
	   }[/code]

[code]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);
}

}[/code]

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

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.