Duvida - utilização de IF (+código, +erro)

Senhores, recebo a mensagem “MISSING RETURN STATEMENT” no cód abaixo:

public class Exercicio7 {

    private int idade;
    private double altura;
    private int peso;
    
    public Exercicio7(int pIdade, int pAltura, int pPeso){
        idade = pIdade;
        altura = pAltura;
        peso = pPeso;
    }
    
    public String verificaCategoria () {
    if (idade<=12)
        return "Infantil";
            else if (idade>13&&idade<16&&peso<40)
                return "Juvenil Leve";
                    else if (idade>13&&idade<16&&peso>40)
                      return "Juvenil Pesado";
                        else if (idade>17&&idade<24&&peso<45)
                            return "Senior Leve";
                                else if (idade>17&&idade<24&&peso>45&&peso<60)
                                    return "Senior Medio";
                                        else if (idade>17&&idade<24&&peso>60)
                                            return "Senior Medio";
                                                else if (idade>24)
                                                    return "Veterano";
                            
    }
}

Onde está o erro? (ou me ajudem a enteder o porquê do erro!).

Obrigado por qualquer ajuda! :wink:

boa noite,

na verdade o return é pra retornar algo em um variavel e senão me engano num se pode ter inumeros retornos.
a msg está dizendo que seu retorno foi perdido
pq não imprime ?

if(idade<=12)
System.out.println("Infantil" + idade);

else if (idade>13&&idade<16&&peso<40)
System.out.println("Juvenil Leve" + idade, peso);

Até poderia… mas quero que não retorne na tela… queria usando o return mesmo.

Só por curiosidade: se utilizasse o System.out.println, o cabeçalho seria:

public [b]VOID [/b]verificaCategoria () { 

Usando o VOID em vez de String, certo?

Se você quiser que o método não retorne nada,
e deseja apenas executar uma sequencia de instruções, como o System.out.println(String str),
então especifique que o tipo de retorno é void.

[quote=EAugusto]Se você quiser que o método não retorne nada,
e deseja apenas executar uma sequencia de instruções, como o System.out.println(String str),
então especifique que o tipo de retorno é void. [/quote]

Augusto, mas não quero usar o Sytem.out… quero usar apenas return.

não se usa return em classe void, e sim em classe que tem um tipo Int ou String porque ae vc vai retornar um valor

Mas no meu code… estou usando STRING…
Mesmo assim estou com erro no momento da compilação…

Podem ocorrer situações em que entra em nenhum if e assim o método não tem retorno.

Para simplificar podes fazer

 if (idade<=12)  
        return "Infantil";  

if (idade>13&&idade<16&&peso<40)  //não precisa do else uma vez que se entrar no if anterior fará return e já não chegará a este if
         return "Juvenil Leve";  

if (idade>13&&idade<16&&peso>40)  //mesma coisa
         return "Juvenil Pesado";  


 ....  
return "Veterano";

Já agora, uma pessoa de 13 anos não tem categoria? Ou uma pessoa de 14 ou 15 anos com exactamente 40Kg?

Então cria uma varivel recebendo sua string e retorna ela e depois.

pmlm,

o exercício que estou tentando fazer é o seguinte:

7) Escreva um método que recebe, via parâmetros, a idade e o peso de um atleta e retorna a categoria do
atleta, de acordo com a seguinte tabela:

Tiro o “else”??

Obrigado pela ajuda!

Quando se retorna o método dependendo de algumas condições (IF’s) o compilador só permitirá
que o programa rode se todas as possibilidades forem verificadas.
Como você fez muitas condições aninhadas, provavelmente não cumpriu todas as possibilidades.
Qualquer coisa retorne uma mensagem padrão se nenhuma as alternativas foram supridas.

[quote=EAugusto]Quando se retorna o método dependendo de algumas condições (IF’s) o compilador só permitirá
que o programa rode se todas as possibilidades forem verificadas.
Como você fez muitas condições aninhadas, provavelmente não cumpriu todas as possibilidades.
Qualquer coisa retorne uma mensagem padrão se nenhuma as alternativas foram supridas.[/quote]

Como assim Augusto? Devo de colocar uma condicao final?

Observações:
a) Escreva um método que recebe, via parâmetros, a idade e o peso de um atleta
Você criou um construtor que recebe parâmetros, não um método que recebe parâmetros.
b) O exercício diz que tem que ser retornado a categoria, entãoo tipo de retorno não pode ser void. (Devido conversas anteriores)
c) VocÊ tem deixado algumas condições para trás como por exemplo

     if (idade<=12)    
        return "Infantil";      
     if (idade>13&&idade<16&&peso<40)  //não precisa do else uma vez que se entrar no if anterior fará return e já não chegará a este if  
         return "Juvenil Leve";      
     if (idade>13&&idade<16&&peso>40)

Quando que a idade de 13 anos será avaliada?
Você verificar até 12 e maior que 13!!!

Boa sorte

[quote=EAugusto]Observações:
a) Escreva um método que recebe, via parâmetros, a idade e o peso de um atleta
Você criou um construtor que recebe parâmetros, não um método que recebe parâmetros.
b) O exercício diz que tem que ser retornado a categoria, entãoo tipo de retorno não pode ser void. (Devido conversas anteriores)
c) VocÊ tem deixado algumas condições para trás como por exemplo

     if (idade<=12)    
        return "Infantil";      
     if (idade>13&&idade<16&&peso<40)  //não precisa do else uma vez que se entrar no if anterior fará return e já não chegará a este if  
         return "Juvenil Leve";      
     if (idade>13&&idade<16&&peso>40)

Quando que a idade de 13 anos será avaliada?
Você verificar até 12 e maior que 13!!!

Boa sorte[/quote]

Beleza! Vou dar uma verificada no code aqui e retorno mais tarde com algum resultado!

Obrigado a todos por enquanto! :wink:

A verdade é que o método tem retornar uma String
e o compilador não confia nos if’s. Vai que os if’s não
correspondem a alguma condição. Então deve-se colocar
um retorno que não entra em if nenhum.

Por exemplo:
Após todos os if’s colocar um return ou
no último if colocar um else sem condição.

Espero ter dado uma força

Resumindo
no final de qualquer método que não seja void tem que possuir um return mesmo que seja um return null;

private String teste(){ .... return null; }

é obrigado que a ultima linha da function seja um return