:: Dúvidas uso do IF, WHILE (+code, +exemplo)

Senhores, boa noite:

Estou tentando fazer o seguinte exercício:

Escreva um método privado de nome leUmaIdade, que lê uma idade, do teclado, e retorna a idade lida. Só aceita idades de 18 a 110 anos (com exceção de 0 que é uma idade fictícia usada para encerrar a entrada de dados).

Então, até o momento, de forma direta, pensei:

public class Idade {

public int leUmaIdade ( ) {
    idade = Teclado.leInt("Digite sua idade:");
        if (idade>=18&&idade<=110){
            return idade;
            System.out.println ("Sua idade é" + idade);
                else if (idade<=18&&idade>=110){
                    int idade = Teclado.leInt("Digite sua idade:");
                       
                }

                
        }
    }
}

Porém, estou recebendo o erro: “ELSE WITHOUT IF” na linha 8.
Outra: acham que meu raciocínio está no caminho certo? Alguma dica de lógica?

Abraços! :wink:

O erro acontece porque você colocou um “else if” dentro de um “if”. Um “else if” deve vir após um “if” e não ficar dentro de um.

Um dica que lhe dou, é que sempre que for realizar comparações que nem essa:

else if (idade&lt;=18&&idade&gt;=110){ 

Faça da seguinte forma, até para melhorar a semântica.

else if ((idade&lt;=18) && (idade&gt;=110)){ 

vlw.

Vemos que tem um ‘else if’ para caso do usuário ter digitado uma idade inválida. Porem nesse ‘else if’ vc solicita novamente a idade e não esta tratando a possibilidade do usuário digitar um valor inválido novamente.
Avalie a possibilidade de usar ‘do while’.

            return idade;  
            System.out.println ("Sua idade é" + idade);  

Outra coisa esse ‘println’ depois do ‘return’ nunca será executado, faca-o antes do ‘return’.

Flw

Fala ai dcloko

So pra deixar claro para outras pessoas que tambem possam ter essa mesma duvida.
O seu codigo estava assim:

public class Idade {

public int leUmaIdade ( ) {
    idade = Teclado.leInt(&quot;Digite sua idade:&quot;);
        if (idade&gt;=18&&idade&lt;=110){
            return idade;
            System.out.println (&quot;Sua idade é&quot; + idade);
                else if (idade&lt;=18&&idade&gt;=110){
                    int idade = Teclado.leInt(&quot;Digite sua idade:&quot;);
                       
                }
        }
    }
}

e com as sugestões dos companheiros e minha ficaria assim:

public class Idade
{
    public int leUmaIdade ( ) 
    {
        int idade = 0;
        do
        { 
            idade = Teclado.leInt(&quot;Digite sua idade:&quot;);
        }
        while(( idade &lt; 18 ) || ( idade &gt; 110 ) );
        System.out.println (&quot;Sua idade é&quot; + idade);
        return idade;
    }
}

Caso tenha cometido algum deslize me ajudem

Não sei se você precisa de laço de repetição,mas não seria mais fácil dessa forma:

[code]public class Idade {

private int leUmaIdade() {
	Scanner teclado = new Scanner(System.in);
	System.out.println("INFORME SUA IDADE");
	int idade = teclado.nextInt();

//se a idade for dentro do esperado, eu retorno
if (idade >= 18 && idade <= 110)
return idade;
//retorno zero caso a condição acima não seja válida
return 0;
}
}
[/code]

Minhas opniões…

Se é pra fazer o exercicio de forma correta

vc escreveu um metodo publico…

Em relação a faça com do while, faça com if, faça com while…de todas as formas vc consegue fazer, e pode variar os resultados.
Procure manter a coesão em suas classes e metodos (Principio basico da OO).

Se é pra ficar lendo ate digitar um valor valido ou ler somente uma vez e se o cara digitou errado vc fecha, a sua necessidade é quem vai te dizer.