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

10 respostas
guhhh

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á

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);
	
				
		} 
		
	}

}

10 Respostas

wln1987

top ten erros de programadores…

saca só:

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

viu qual o erro?

Espero ter ajudado, abracos!

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!

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.

guhhh

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!

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.

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

GiancarloBraga

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.

guhhh

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

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

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 ?

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…

guhhh
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..

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

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);
		
		} 	
	}
}
GiancarloBraga

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

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

guhhh

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

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

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

Abcs pessoal!

Criado 14 de agosto de 2007
Ultima resposta 14 de ago. de 2007
Respostas 10
Participantes 3