Dúvida em código...  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
akumaldo
Java Ninja
[Avatar]

Membro desde: 09/06/2006 20:30:06
Mensagens: 283
Offline



Nesse código pessoal estou com uma dúvida...no meu getConta(int x) eu gostaria de verificar se o x que me é passado não vai estourar o .lenght do meu array, porém tentei fazer assim:



Mas não vai desse jeito, acusa que a função getConta precisa retornar o tipo Conta, eu entendo, é por que o return não pode aparecer dentro de um bloco if...mas agora não me vêm como posso fazer isso? alguém se habilita?

"O homem se resume em sua vontade de poder...Vontade de poder e nada mais! Viva a vida, morte a verdade..."
Nietzsche
Filipe Sabella
GUJ Expert

Membro desde: 12/03/2003 11:25:57
Mensagens: 4680
Offline

Existem duas formas de lidar com isto.

1. Lançar uma exceção e parar o programa. É bom reutilizar exceções que já existem:


2. Retornar null. Há outras maneiras de implementar esta checagem simples, mas é bom ter apenas um "return" por método:

Former LIPE.
[ICQ]
thingol
Moderador

Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline

akumaldo wrote:



Mas não vai desse jeito, acusa que a função getConta precisa retornar o tipo Conta, eu entendo, é por que o return não pode aparecer dentro de um bloco if...mas agora não me vêm como posso fazer isso? alguém se habilita?


Acho que seu problema é de português. Qual é a diferença entre conta[x] e contas[x]?

A propósito, o return pode aparecer em um bloco if sim. Não tem problemas.

(Não fique chateado, eu faço isso de vez em quando também.)


[WWW]
akumaldo
Java Ninja
[Avatar]

Membro desde: 09/06/2006 20:30:06
Mensagens: 283
Offline

Bom..eu só escrevi errado aqui no site..por que lá na class eu prestei bastante atenção se estava escrevendo corretamente...
bom...quando eu coloco dentro do if, aparece simplesmente que o metodo deve retornar um objeto do tipo Conta...pode ter certez conferi bastante para não ver se era erro de português(sempre acontece mesmo...)
bom..vou tentar jogando a exception...
abração

"O homem se resume em sua vontade de poder...Vontade de poder e nada mais! Viva a vida, morte a verdade..."
Nietzsche
Mantu
GUJ Ranger
[Avatar]

Membro desde: 27/03/2006 09:05:16
Mensagens: 961
Localização: São Paulo/SP
Offline

Por que quando vc coloca dentro do if "aparece simplesmente que o metodo deve retornar um objeto do tipo Conta"? Porque o compilador é um "cara cauteloso", pessimista até, que pensa (ou tenta) em todas as possibilidades possíveis de nosso programa fazer caca...
O compilador te fala isso porque provavelmente naquele trecho que vc escreveu

não deve ter uma instrução return.
Por que isso? Porque se um método retorna Conta, por exemplo, o compilador não vai compilar enquanto houver alguma possibilidade de o método terminar e não retornar nada, ou seja, não executar uma instrução .
Perceba o seguinte: Vamos supor que o seu código seja esse para aquele método:

Nesse caso, vai dar aquele erro que está te apoquentando. Vejamos porque:
Se x for menor que o comprimento de conta, ele entra no if e retorn conta[x]. Mas se x for maior ou igual ao comprimento de conta o que aconteceria? O método iria entrar no else, jogar na tela um "Nenhuma conta encontrada", sair do else e encerrar o processamen... OPA!!! Ele ia encerrar sem retornar nada!!! Isso o compilador não pode permitir, por que lá fora, tem alguém que chamou o getConta(int) e está esperando dele ou uma instância da classe Conta, ou um null. Por isso aquele erro que vc mencionou: Por que o compilador (ou pré-compilador, se vc tiver usando alguma IDE que te mostre os erros em tempo de digitação) não permite que um método, que diz retorna alguma, não retorne nada (ou seja, "retorne" void).
E isso continuaria acontecendo se vc tivesse um caso assim também:

Nesse caso, se o método entrar no segundo else, ele vai denovo terminar sem retornar nada. Então o compilador tá manda aquela mensagensinha simpático, informando que o método deve retornar um Conta.
Espero ter ajudado!
qq coisa, poste mais, ok!?

[]'s
Mantu

"Vou lançar o 'Caguei'. Caguei para o 'Cansei'". Luciano Camargo
"O povo votou contra a opinião pública". Um certo jornalão da mídia golpista, a respeito da vitória de um certo cadidato a presidente do Brasil.

[Email] [MSN] [ICQ]
peczenyj
Moderador
[Avatar]

Membro desde: 26/03/2006 23:25:37
Mensagens: 3191
Localização: Rio de Janeiro
Offline

Vc pode tratar esta tipo de coisa com try/catch. imagine que vc tem um vetor de contas com 1000 elementos mas só inicializou 50 deles... o ideal seria implementar um metodo find que retornasse um booleano se não existisse a conta, por exemplo.

http://pacman.blog.br

'Não importa quanto alguém se dedique à tarefa. Ninguém consegue fazer a água da cascata cair para cima.'
[WWW]
akumaldo
Java Ninja
[Avatar]

Membro desde: 09/06/2006 20:30:06
Mensagens: 283
Offline

Mantu wrote:Por que quando vc coloca dentro do if "aparece simplesmente que o metodo deve retornar um objeto do tipo Conta"? Porque o compilador é um "cara cauteloso", pessimista até, que pensa (ou tenta) em todas as possibilidades possíveis de nosso programa fazer caca...
O compilador te fala isso porque provavelmente naquele trecho que vc escreveu

não deve ter uma instrução return.
Por que isso? Porque se um método retorna Conta, por exemplo, o compilador não vai compilar enquanto houver alguma possibilidade de o método terminar e não retornar nada, ou seja, não executar uma instrução .
Perceba o seguinte: Vamos supor que o seu código seja esse para aquele método:

Nesse caso, vai dar aquele erro que está te apoquentando. Vejamos porque:
Se x for menor que o comprimento de conta, ele entra no if e retorn conta[x]. Mas se x for maior ou igual ao comprimento de conta o que aconteceria? O método iria entrar no else, jogar na tela um "Nenhuma conta encontrada", sair do else e encerrar o processamen... OPA!!! Ele ia encerrar sem retornar nada!!! Isso o compilador não pode permitir, por que lá fora, tem alguém que chamou o getConta(int) e está esperando dele ou uma instância da classe Conta, ou um null. Por isso aquele erro que vc mencionou: Por que o compilador (ou pré-compilador, se vc tiver usando alguma IDE que te mostre os erros em tempo de digitação) não permite que um método, que diz retorna alguma, não retorne nada (ou seja, "retorne" void).
E isso continuaria acontecendo se vc tivesse um caso assim também:

Nesse caso, se o método entrar no segundo else, ele vai denovo terminar sem retornar nada. Então o compilador tá manda aquela mensagensinha simpático, informando que o método deve retornar um Conta.
Espero ter ajudado!
qq coisa, poste mais, ok!?


Genial...é isso ae mesmo!! o compilador estava alertando para a burrada de talvez não retornar nada...OBRIGADO PELA LUZ!! foi muito útil a explicação!!agradeço!
agora o code já está rodando legal, taquei uma exception e tá rolando legal agora....obrigado a todos!
abraço

"O homem se resume em sua vontade de poder...Vontade de poder e nada mais! Viva a vida, morte a verdade..."
Nietzsche
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team