Retorno de método / Tipo complexo

Tenho sa seguintes classes:

class Conta {
    //atributos e metodos aqui dentro
}

class Banco {
    Conta[] contas;

    Conta pegaConta(int numeroDaContaQueDesejoSelecionar) {
        int i;
        //aqui dentro realiza-se o processamento
        return contas[i];
    }
}

Tenho várias contas instanciadas e inseridas dentro de um objeto do tipo Banco, quero passar como parametro o numero de determinada conta e o metodo deverá retornar a referencia para esta conta. Ocorre o seguinte erro, ou seja, o retorno está errado "/

ExercicioHerencaPolimorfismo.java:81: missing return statement
	}
	^
1 error

Você instanciou o array de contas?

Certamente, tenho algumas contas instanciadas assim:

contas[0]
contas[1]
contas[2]

e dentro delas estão os objetos do tipo conta…

com apenas esse trecho de código, pelo menos pra mim, fica difícil ajudar a resolver o problema. Não pode postar o restante? :slight_smile:

Acho que você não inicializou a variável i.
Ela recebe o que?

Talvez fosse Conta pegaConta(int numeroDaContaQueDesejoSelecionar) { int i = numeroDaContaQueDesejoSelecionar; //aqui dentro realiza-se o processamento return contas[i]; }

Sem problemas, segue o código completo:

class Conta {
	//Atributos		
	protected double saldo;
	
	//Metodos
	double getSaldo() {
		return this.saldo;
	}
	
	void deposita(double valor) {
		this.saldo += valor;
	}
	
	void saca(double valor) {
		this.saldo -= valor;
	}
	
	void atualiza(double taxa) {
		this.saldo += this.saldo * taxa;
	}
}

class ContaCorrente extends Conta {
	void atualiza(double taxa) {
		super.atualiza(taxa * 2);
	}

	void deposita(double valor) {
		this.saldo += valor - 0.10;
	}
}

class ContaPoupanca extends Conta {
	void atualiza(double taxa) {
		super.atualiza(taxa * 3);
	}
}


class AtualizadorDeContas {
	private double saldoTotal = 0;
	private double selic;

	AtualizadorDeContas(double selicTemp) {
		this.selic = selicTemp;
	}
	
	void roda(Conta c) {
		System.out.println("Tipo da conta: " + c);
		System.out.println("Saldo anterior: " + c.getSaldo()); //Mostrando saldo
		c.atualiza(selic); //Atualizando a conta
		System.out.println("Saldo atual: " + c.getSaldo() + "\n");
		this.saldoTotal += c.getSaldo();
	}

	double getSaldoTotal() {
		return this.saldoTotal;
	}
}

class Banco {
	Conta[] contas;

	boolean adiciona(Conta c) {
		for(int i=0; i<contas.length; i++) {
			if (contas[i] == null) {
				contas[i] = c;
				return true;
			}
		}
		return false;
	}

	Conta pegaConta(int x) {
		for(int i=0; i<contas.length; i++) {
			if (i == x) {
				return contas[i];
			}
		}
	}


	int pegaTotalDeContas() {
		int contadorDeContas=0;
		for(int i=0; i<contas.length; i++) {
			if(contas[i] != null) {
				contadorDeContas++;
			}
		}
		return contadorDeContas;
	}

}

class ExercicioHerencaPolimorfismo {
	public static void main(String[] args) {
		Banco bb = new Banco(); //Criando objeto Banco
		bb.contas = new Conta[10]; //Abrindo array para contas para o Banco

		ContaCorrente[] cc = new ContaCorrente[5]; //Abrindo array para contacorrente
		ContaPoupanca[] cp = new ContaPoupanca[5]; //Abrindo array para contapoupanca

		AtualizadorDeContas adc = new AtualizadorDeContas(0.01);
		
		for(int i=0; i<cc.length; i++) {
			cc[i] = new ContaCorrente(); //Instanciando novos objetos cc, um para cada posicao do array
		}
		for(int i=0; i<cp.length; i++) {
			cp[i] = new ContaPoupanca(); //Instanciando novos objetos cp um para cada posicao do array
		}

		for(int i=0; i<(bb.contas.length/2); i++) {
			bb.adiciona(cc[i]);
			bb.adiciona(cp[i]);
		}
		
		bb.contas[0].deposita(1000);
		bb.contas[1].deposita(1000);
		bb.contas[2].deposita(1000);
		bb.contas[3].deposita(1000);
		bb.contas[4].deposita(1000);
		bb.contas[5].deposita(1000);

		for(int i=0; i<bb.contas.length; i++) {
			adc.roda(bb.contas[i]);
		}
		
		
	}
}

Pelo código completo, em

[code] Conta pegaConta(int x) {
for(int i=0; i<contas.length; i++) {
if (i == x) {
return contas[i];
}
}

}  [/code]

e colocando


  Conta pegaConta(int x) {  
        for(int i=0; i<contas.length; i++) {  
            if (i == x) {  
                return contas[i];  
            }  
        }
		return null;  
    }  
  

Funcionou. Talvez seja isso :slight_smile:
Se você estiver pelo eclipse (ou outro IDE) quando aparacer aquele balaozinho de erro ao lado da linha, você clica lá e ele te dá algumas dicas e possíveis soluções

Estou usando o gedit por enquanto, vou passar o usar o eclipse daqui pra frente.
Cara, me chamou atenção em uma coisa agora, esses tempos fiz um método com retorno tipo boolean, e se eu colocasse somente um return true, não compilava…tinha que colocar o return false…sabe pq isso??
Parece a mesma situação que ocorreu aqui, obrigado pela dica :smiley:

esse return tava dentro de um if? ou qualquer outra condição lógica?

Se for isso, acontece porque o método tem que retornar alguma coisa independente de atender ou não a condição lógica, se retornar somente dentro da condição, se não atende-la não terá retorno, concorda?

Está explicado, hehe. Achei que o java se encarrega-se de retornar um null por exemplo, caso a condição não fosse satisfeita :slight_smile:
Esclareceu minha dúvida markin1, grato.

you are welcome :slight_smile: