[RESOLVIDO]Help no code! Algo esta errado :( Duvida Simples

Opa galera,antes de qualquer coisa não efetuei a pergunto no tópico que esta falando sobre números primos ali,pois o jeito que eu fiz foi diferente…então abri o meu mesmo…

Bem eh o seguinte eh bem simples…soh ler um numero e dizer se ele eh primo ou não é…porém ele sempre diz que o numero NÃO EH PRIMO

Gostaria de saber aonde esta o erro que eu não enxergo nesse code?

Agradeço desde já

[code]import javax.swing.JOptionPane;

public class NumerosPrimos {

/**
 * @param args
 */
public static void main(String[] args) {
	
	String numStrg = null;
	int num = 0;
	
	// Leitura do valor
	numStrg = JOptionPane.showInputDialog("Digite o numero a ser pesquisado");
	
	// Conversao de Str para Integer
	num = Integer.parseInt(numStrg);
	
	//Flag
	boolean Flag = false;
	
	//Laco de Repeticao
	while(num != 0){
		for(int x=2; x<(num-1); x++ ){
			if(num % x == 0 ){
				Flag = true;
			}
		}
	if(Flag = false){
		JOptionPane.showMessageDialog(null,"O numero é primo");	
	}
	else{
		JOptionPane.showMessageDialog(null,"O numero nao é primo");
	}
	
	numStrg = JOptionPane.showInputDialog ("Digite o numero a ser pesquisado");
	num = Integer.parseInt(numStrg);

			
	} 
	
}

}
[/code]

top ten erros de programadores…

saca só:

if(Flag = false){ JOptionPane.showMessageDialog(null,"O numero é primo"); }

viu qual o erro?

Espero ter ajudado, abracos!

Dica: quando tiver usando boolean num coloca comparação… taca ele direto na condição, blz? Fica mais legível e menos suscetível a erros.

Abracos!

Isso aí mesmo.

O erro está aqui:
if(Flag = false){

Você basicamente não está fazendo uma comparação lógica com este operador ‘=’, mas sim uma atribuição. Para corrigir isto, você deve usar dois iguais ‘==’ consecutivos que corresponde a um operador lógico de comparação.

Abraço.

[quote=wln1987]Dica: quando tiver usando boolean num coloca comparação… taca ele direto na condição, blz? Fica mais legível e menos suscetível a erros.

Abracos![/quote]

[quote=GiancarloBraga]Isso aí mesmo.

O erro está aqui:
if(Flag = false){

Você basicamente não está fazendo uma comparação lógica com este operador ‘=’, mas sim uma atribuição. Para corrigir isto, você deve usar dois iguais ‘==’ consecutivos que corresponde a um operador lógico de comparação.

Abraço. [/quote]

Agradeço a vocês então pela ajuda…sabe como q eh neh…novo em java acustumado com o pascal eu nem vi akilo la…rs

ahh wln…mas akilo que voce disse pra usar ele direto na condição…como ficaria…poderia me mostrar ? que eu num entendi mto bem com que voce quis dizer em usa-lo direto na condição…

abcs

O que ele quis dizer para você fazer é isso:

if(Flag){

Você basicamente está inserindo só a expressão booleana.

Nem precisa comparar nada! Se for verdadeiro vai no if e se for falso vai no else! Nem precisa comparar nesse caso pois você JÁ ESTÁ fornecendo um dado booleano.

Outra dica, é que por convenção, use nomes de variável começando com letra minúscula.

Abraço.

ahh uma ultima dúvida…testei o código sem o Flag = false que se encontra no final do loop logo após ele solicitar novamente o número ao usuario

[code] numStrg = JOptionPane.showInputDialog (“Digite o numero a ser pesquisado”);
num = Integer.parseInt(numStrg);

	Flag = false;[/code]

por que tive que adicionar esse Flag = false para que o programa mostrasse corretamente na segunda vez se o número era Primo ou não…pq tipo eu tentei sem adicionar isso ele dava que todos não eram primos…pq isso ?

Porque você está dentro do laço while e a cada iteração a variável Flags continua com o valor da iteração anterior, não sendo inicializada novamente pois a declaração da variável Flags veio antes do loop while. O que acontece é que acabará havendo uma distorção do resultado em conseqüência disso.

Tente inicializar a variável Flags dentro do loop while e antes do for…

[quote=GiancarloBraga]Porque você está dentro do laço while e a cada iteração a variável Flags continua com o valor da iteração anterior, não sendo inicializada novamente pois a declaração da variável Flags veio antes do loop while. O que acontece é que acabará havendo uma distorção do resultado em conseqüência disso.

Tente inicializar a variável Flags dentro do loop while e antes do for…[/quote]

Fiz oque voces falaram e deu tudo certinho então…veja se esta 100% o código!Ahh brigadão pelas dicas viu!

[code]import javax.swing.JOptionPane;

public class NumerosPrimos {

/**
 * @param args
 */
public static void main(String[] args) {
	
	String numStrg = null;
	int num = 0;
	
	// Leitura do valor
	numStrg = JOptionPane.showInputDialog("Digite o numero a ser pesquisado");
	
	// Conversao de Str para Integer
	num = Integer.parseInt(numStrg);
	
	//Flag
	boolean flag;
	
	//Laco de Repeticao
	while(num != 0){
		flag = false;
		for(int x=2; x<(num-1); x++ ){
			if((num % x) == 0 ){
				flag = true;
			}
		}
	if(flag){ //condicional True = Nao Eh Primo // False = Eh
		JOptionPane.showMessageDialog(null,"O numero nao é primo");	
	}
	else{
		JOptionPane.showMessageDialog(null,"O numero é primo");
	}

	numStrg = JOptionPane.showInputDialog ("Digite o numero a ser pesquisado");
	num = Integer.parseInt(numStrg);
	
	} 	
}

}[/code]

Opa! Ao meu ver agora está certinho sim.
Qualquer coisa volte a perguntar aí.

Eu também sou mais ou menos iniciante. :smiley:

[quote=GiancarloBraga]Opa! Ao meu ver agora está certinho sim.
Qualquer coisa volte a perguntar aí.

Eu também sou mais ou menos iniciante. :D[/quote]

Pode Deixar!! Qlqr coisa volto a perguntar com ctz!!

Abcs pessoal!