Problema com operador % (resto)

Pessoal, estou tentando fazer um programinha banal aqui, mas estou tendo dificuldades em implementá-lo.
O problema é verificar se um número p é primo ou não (como não consigo fazer isso ? :shock:).
Informo um número p via Scanner e faço um loop for para receber o resto da divisão de p por i (o contador do loop) que varia de 2 até p (tá, eu sei, pode ser a té a metade de p).
Mas para qualquer número p que informo o programa dá uma mensagem dizendo que o número é primo, por exemplo, ele informa que o 9 é primo.

Acredito que o problema esteja em saber usar o operador resto (%). Alguém pode dar uma luz, por favor ?

O código está logo abaixo:

package Lista_01;
import java.util.Scanner; // Programa utiliza a classe Scanner

public class Primo
{
	public static void main(String[] args)
	{
		// Cria Scanner para obter entrada a partir da janela de comando
		Scanner input = new Scanner (System.in);

		// Declaração de variáveis		
		int p;
		float num;
		int i;
		boolean result;

		// Inicialização da variável boleana result
		result = true;

		// Pede para que seja informado o número p a ser verificado se é primo
		System.out.println("Informe o número p a ser virificado");

		// Utiliza a classe Scanner para a entrada do número p
		p = input.nextInt();

		// Varre a variável i de p até 2 para verificar se a divisão
		// de p pelo número i resulta em um resto inteiro.
		// Se o número n dividido por i tiver resto igual a zero,
		// atribui false à variável result e para a execução do loop.

		for(i=2;i<=p;i++)
		{
			num = p%i;
			if (num == 0)
			{
				result = false;
				break;
			}
		}

		// Se a result for true, o número n será primo. Com isso imprime
		// mensagem de que o número n é primo. Caso contrário imprime
		// mensagem dizendo que não é primo.
		if (result = true)
		{
			System.out.println("O número "+ p +" é primo");
		}
		else
		{
			System.out.println("O número "+ p + " Não é primo");
		}
	}
}

Desde já agradeço a ajuda.

O problema é o :

if (result = true)  

Que deveria ser:

if (result == true)  

Sempre vai ser verdadeiro a primeira pois sempre vai ser possível atribuir ‘true’ a ele.

Tem outro problema: Pelo seu loop, ele vai dividir o número de 2 até ‘p’ (inclusive) e vai ser óbvio que ele vai ser divisível por ele mesmo e seu código vai sempre definir como não primo. Mude isso só para até menor do que ‘p’. E para descobrir se o número é primo ou não, você não precisa iterar até a metade do número e sim até sua raiz quadrada.

Até!

Maquiavelbona, você parece ser meu anjo da guarda :slight_smile:
Sempre me ajuda por aqui, hehehe !

Bem, muitíssimo obrigado mais uma vez pela ajuda. Não me conformo pelos erros mais uma vez. E estou puto da cara em ter que fazer esses exercícios, já estou estudando a conexão com banco de dados, estudei Java nas férias, e agora o professor vem com as listas de exercícios para se fazer essas coisas ! :x

Bem, o problema é que não entendi quando você disse que sempre será possível atribuir true à variável result. Por que se eu estou atribuindo false dentro do loop ?

E por que não posso iterar o loop até p se eu estou interrompendo sua execução para o primeiro valor false encontrado com o comendo break ?

Se puder ter um pouco mais de paciência e responder essas duas dúvidas, eu agradeceria !

De qualquer forma, muito obrigado mais uma vez.

Valder,

Quanto à questão de atribuir o valor true à variável result, também não entendi. Agora, quanto à questão do LOOP, se você deixar for (i=2; i <=p; i++), você fará SEMPRE a seguinte operação:

num = p%p;

Isso sempre dará resto zero… Você tem que alterar o loop para

for (i = 2; i < p; i++)

espero ter ajudado, abraços

Quanto a variável receber ‘true’, se deve ao retorno de uma atribuição. Quando fazes isso:

if(result=true)

A Jvm pensa assim:

result=true; if(result)
Isso é só para lembrar que as atribuições tem retorno o valor atríbuído ( ou mais precisamente a mesma varíavel mas depois de receber o valor ) e não ‘null’.
Isso não aconteceria se tivesse:

if(result==true)

Até!

Valçeu aí, Thundercas e maquiavelbona. Esse fpórum aqui é demais, muito obrigado, pessoal. Se precisarem de aulas de matemática ou física, estou a posto :lol:

Eu sempre recomendo esse fórum para meus colegas de fazuldade, mas eles não entram. Azar o deles.

[quote=Valder Olmo Corrêa]Valçeu aí, Thundercas e maquiavelbona. Esse fpórum aqui é demais, muito obrigado, pessoal. Se precisarem de aulas de matemática ou física, estou a posto :lol:

Eu sempre recomendo esse fórum para meus colegas de fazuldade, mas eles não entram. Azar o deles.[/quote]
Não ofereça porque vai que aceitamos. Já estou vendo minhas notas vermelhas nas primeiras provas de Álgebra I e Cálculo I.

Até!