#Dúvida, Operadores

Boa tarde, o código abaixo está executando, mas não estou entendendo porque quando altero a comparação while(c <= n) para while (c> n) ele não executa corretamente o código, sendo que quero que repita o laço até que contador c seja maior que o numero digitado pelo usuário. obrigado.

package AulasJava;

//import java.util.Scanner;

import java.util.Scanner;

public class ImprimePrimos{

public static void main(String[]args){
  
    Scanner  input = new Scanner(System.in);
    int n;
    int c = 1;
    int contDiv = 0;
    
    System.out.print("digite um numero ");
    n = input.nextInt();
    
    do{
        System.out.print(c + " - ");
       
        if (n % c == 0){
            contDiv = contDiv +1;
                     
        } 
         c = c + 1;
    }   **while(c <= n)**;
      
         if (contDiv > 2){
             System.out.println("O valor " + n + " não é PRIMO");
         } else{
             System.out.println("O valor " + n + " é PRIMO");
         }
        System.out.println(contDiv);
    

}

}

se você colocar while (c > n); Ou ele não vai executar, caso o número do usuário seja maior que c,
ou ele nunca vai sair do laço, já que toda repetição vai adicionar mais um a c em c = c + 1;
Então acho que o que você quer é colocar while (c <= n) mesmo;

1 curtida

Clocando o "while c > n ", qualquer número que você coloque - tirando o 1 -, irá acusar que é primo, portanto, não está funcionando corretamente.

Caso você coloque o valor 1 o seu código irá ficar em looping infinitamente, já que ele sempre irá adicionar mais valores à c, sem dar nenhuma instrução para o programa sair deste looping.

Enquanto com a condição “c <= n”, ele funciona em todos os casos, fora no caso de ser digitado 1, já que ele acusa que o número 1 é primo.

Amigo, recomendo você depurar o seu código, assim você terá uma noção do que está acontecendo e conseguirá ver em que parte do código está dando problemas, e eu acredito que o seu problema maior é com o número 1, talvez se você criar uma condição para ele o problema se resolva.

1 curtida

Obrigado pela ajuda, mas quando ele compara
c = 1 + 1;
while(2 > 7) não! (7 é o numero digitado pelo usuário)

Não deveria repetir o comando DO do inicio?

Só sairia do DO quando a condição fosse (8>7)?

Não cara, isso é bem básico. A palavra while significa enquanto, então enquanto 2 > for maior que 7 ele repete, senão ele sai do looping. Se você coloca while( enquanto 2 < menor que 7 ai ele repete.

2 curtidas

Você está se confundindo. é justamente por 2 não ser maior que 7 que ele saí do looping, já que ele só pode se repetir enquanto o valor contido em c for maior que o valor contido em n.

Coloque o valor 1, neste mesmo código, ele irá ficar em looping eterno, pois o valor contido em c é maior que o valor contido em n, e no seu código não existe nenhuma condição para que ele saia do looping.

Depurando o código você irá perceber que mesmo com o valor 7, após passar pelo while ele volta ao DO, porém, ele não executa o bloco de instrução pois o while deu false.

1 curtida

Alem das explicações dos colegas, faça esse teste basico:

System.out.println(2 > 7);

E veja o que imprime… após isso veja como while se comporta:

while (true) {
    //faça algo...
}

Tendo isso em mente, como vc quer que o while rode se deu false, pegou?

1 curtida