[RESOLVIDO] Problema com Java Básico

Estava criando um código para me responder se um número é divisivel por 2 ou não. Em caso positivo ou negativo ele retorna uma mensagem simples.

O primeiro código (que não imprime corretamente as afirmativas) não inclui no if o método que verifica se o numero é ou não divisível por 2 (eu imaginei que o problema fosse no while , mas depois de 30 min testando eu pensei que a falha deveria ser que o mesmo valor inicial é enviado para o teste , que por sua vez sempre retorna true , independente da adição que eu coloquei dentro do if) :

> 
> public class Test {
> 
>     public static void main(String[] args) {
> 
> 
>         int numbertotest = 0;
>         int finishnumber = 20;
>         boolean result = isEvenNumber(numbertotest);
>         while (numbertotest != finishnumber) {
>             if (result) {
>                 System.out.println("THE NUMBER " + numbertotest + " IS AN EVEN NUMBER !");
>                 numbertotest++;
>             } else {
>                 System.out.println("THE NUMBER " + numbertotest + " IS AN NOT AN EVEN NUMBER !");
>                 numbertotest++;
>             }
>         }
> 
>     }
> 
>     public static boolean isEvenNumber(int numbertotest) {
> 
>         if ((numbertotest % 2) == 0) {
>             return true;
>         } else {
>             return false;
>         }
>     }
> }

No segundo código tudo funciona , mas para isso eu tive que colocar o método no if .

> public class Test {
> 
>     public static void main(String[] args) {
> 
> 
> 
>         int numbertotest=1;
>         int finishnumber =20;
>         boolean result = isEvenNumber(numbertotest);
>         while(numbertotest < finishnumber) {
>             if(isEvenNumber(numbertotest)){ System.out.println("THE NUMBER " + numbertotest + " IS AN EVEN NUMBER !");
>             numbertotest++;
>             }
>             else {
>             System.out.println("THE NUMBER " + numbertotest + " IS AN NOT AN EVEN NUMBER !");
>             numbertotest++; }
>             continue;}
> 
>         }
> 
>     public static boolean isEvenNumber(int numbertotest) {
> 
>         if ((numbertotest % 2) == 0) {
>             return true;
>         } else {
>             return false;
>         }
> 
>     }
> }

Os dois deveriam funcionar , mas só um imprime tudo correto. Porque ?

Existe uma ordem que deve ser seguida, quando falamos em repetições e comparações.
Veja, você tem esta linha

Antes do while.
Este teste nunca muda e se result é true, será true até o while parar. A mesma coisa caso seja false.
O ideal é comparar a cada iteração.

Caramba ! É muito legal ver funcionando mudando uma linha de posição. Vai demorar até eu pegar a forma de pensar correta. Obrigado pela resposta.

Funcionou direitinho.

> public class Test {
> 
>     public static void main(String[] args) {
> 
> 
>         int numbertotest = 0;
>         int finishnumber = 20;
>         while (numbertotest != finishnumber) {
>             boolean result = isEvenNumber(numbertotest);
>             if (result) {
>                 System.out.println("THE NUMBER " + numbertotest + " IS AN EVEN NUMBER !");
>                 numbertotest++;
>             } else {
>                 System.out.println("THE NUMBER " + numbertotest + " IS AN NOT AN EVEN NUMBER !");
>                 numbertotest++;
>             }
>         }
> 
>     }
> 
>     public static boolean isEvenNumber(int numbertotest) {
> 
>         if ((numbertotest % 2) == 0) {
>             return true;
>         } else {
>             return false;
>         }
> 
>     }
> }

Essa forma de pensar correta vem do que chamam de lógica de programação.
É estudando algoritmos que você aprende a definir o que precisa e em que ordem precisa para que as coisas funcionem adequadamente.