Quais são os meus erros?

12 respostas
F

Não consigo acertar meu código:

void imprimeNPrimeirosPrimos(int inpp){

int nroDivisores = 0;
for(int i = 1; i <= primos; i++){
  for(int j = 1; j <= primos; j++){
  if(j % i == 0){
    nroDivisores++;}
    if(nroDivisores <= 2){
      System.out.print(j);
      System.out.println();
    }
  }
}

}

Se alguém puder ajudar…

12 Respostas

B

Ola,

Qual o erro?

Pô, formata o codigo e coloca ele dentro a tag [code], assim vai ficar melhor pra gente ler o teu codigo.

latorre

Por acaso o atributo primos não é o inpp???

F
void imprimeNPrimeirosPrimos(){
    
    int nroDivisores = 0;
    System.out.println("Escolha um Valor inicial:");
    primos = sc.nextInt();
    for(int i = 1; i <= primos; i++){
      for(int j = 1; j <= primos; j++){
        if(j % i == 0){
          nroDivisores++;}
        if(nroDivisores <= 2){
          System.out.print(j);
          System.out.println();
        }
      }
    }
  }
latorre

Olá Fabio, creio que está faltando você estanciar a classe Scanner:

Scanner sc = new Scanner(System.in);
int primos = sc.nextInt();

Espero ter ajudado.

shoko

Eu fiz um aqui e percebi que o seu erro estava no segundo for que não vai até primos e sim até o tamanho de i e na comparação com os if. pois você primeiro compara a divisao dele com o outro é igual a 0 e depois se é diferente de 0, na verdade ele quase sempre vai entrar no segundo if, Explicação:

Imagina que o numero 4.
4%1 = 0;
4%2 = 0;
4%3=1.33;
4%4=0;

Ou seja, na hora em que a sua lógica dividisse o numero 4 por 3 ele automaticamente iria deduzir que o numero era primo e iria imprimir. Então oq eu fiz foi o seguinte.. eu já eliminei todos os numeros pares(Pois nenhum numero par é primo) e depois eu fiz a comparação.

Bem espero que você tenha entendido. qualquer coisa estamos ai!

public class TestePrimo {
	public static void main(String[] args) {
		int nroDivisores = 0;
		// System.out.println("Escolha um Valor inicial:");
		int primos = 10;
		for (int i = 1; i <= primos; i++) {
			if (i % 2 != 0) {
				for (int j = 1; j < i; j++) {
					if (i % j != 0) {
						System.out.print("O numero " + i + " eh primo");
						System.out.println();
						break;
					}
				}

			}

		}
	}
}
shoko

Primeiramente não sei se voce estava com duvidas na lógica ou em outra coisa, porém eu tentei resolver ou pelo menos modificar.
obs: Não entendi oq voce deseja fazer, eu estou supondo que você deseja encontrar quais os numeros primos até um certo valor.
Eu fiz um aqui e percebi que o seu erro estava no segundo for que não vai até primos e sim até o tamanho de i e na comparação com os if. pois você primeiro compara a divisao dele com o outro é igual a 0 e depois se é diferente de 0, na verdade ele quase sempre vai entrar no segundo if, Explicação:

Imagina que o numero 4.
4%1 = 0;
4%2 = 0;
4%3=1.33;
4%4=0;

Ou seja, na hora em que a sua lógica dividisse o numero 4 por 3 ele automaticamente iria deduzir que o numero era primo e iria imprimir. Então oq eu fiz foi o seguinte.. eu já eliminei todos os numeros pares(Pois nenhum numero par é primo) e depois eu fiz a comparação.

Bem espero que você tenha entendido. qualquer coisa estamos ai!

public class TestePrimo {
	public static void main(String[] args) {

		// System.out.println("Escolha um Valor inicial:");
		int primos = 25;
		boolean primo;
		for (int i = 2; i <= primos; i++) {
			primo = true;
			for (int j = 2; j < i; j++) {
				if (i % j == 0) {
					primo = false;
					break;
				}
			}
			if (primo)
				System.out.println(i);
		}
	}
}
F

Acho que é mais ou menos por aí, mas no Interaction foram imprimidos os números ímpares em vez dos primos, acho que é porque não percorreu os números todos anteriores.
Dá uma olhada:

Eu fiz por leitura de teclado

Welcome to DrJava.
> leTeclado lt = new leTeclado()
> lt.imprimeNPrimeirosPrimos()
Escolha um Valor inicial:
100
O numero 3 eh primo
O numero 5 eh primo
O numero 7 eh primo
O numero 9 eh primo
O numero 11 eh primo
O numero 13 eh primo
O numero 15 eh primo
O numero 17 eh primo
O numero 19 eh primo
O numero 21 eh primo
O numero 23 eh primo
O numero 25 eh primo
O numero 27 eh primo
O numero 29 eh primo
O numero 31 eh primo
O numero 33 eh primo
O numero 35 eh primo
O numero 37 eh primo
O numero 39 eh primo
O numero 41 eh primo
O numero 43 eh primo
O numero 45 eh primo
O numero 47 eh primo
O numero 49 eh primo
O numero 51 eh primo
O numero 53 eh primo
O numero 55 eh primo
O numero 57 eh primo
O numero 59 eh primo
O numero 61 eh primo
O numero 63 eh primo
O numero 65 eh primo
O numero 67 eh primo
O numero 69 eh primo
O numero 71 eh primo
O numero 73 eh primo
O numero 75 eh primo
O numero 77 eh primo
O numero 79 eh primo
O numero 81 eh primo
O numero 83 eh primo
O numero 85 eh primo
O numero 87 eh primo
O numero 89 eh primo
O numero 91 eh primo
O numero 93 eh primo
O numero 95 eh primo
O numero 97 eh primo
O numero 99 eh primo
>
rmendes08

Fabio, explique mais em alto nivel o seu algoritmo. Pelo que eu entendi do código, você recebe um número N, e o programa deve imprimir todos os números primos de 2 até N, OK ? E vc faz isso da seguinte maneira, você implementa um laço, e para cada número do intervalo testado você testa o número de divisores, é isso ?

shoko

pronto cara eu arrumei lá encima…
ve se está tudo ok!!

tipo eu tava fazendo errado era o laço que eu estava fazendo errado, e os meus if estavam errados também pois cairia naquele caso do 4 que eu te falei, foi erro meu, me desculpe, espero que você tenha entendido a lógica.

flw

F

Deu certo sim, valeu…
Quando eu precisar de outras dúvidas eu coloco aqui, beleza?
Quando o programa fica pronto parece fácil, mas até chegar lá é que é complicado, valeu!

rmendes08
//imprime os números primos de 2 até algum número N 
for (int i = 2; i <= N; i++) 
{
        //conta o número de divisores no intervalo fechado [2, N-1]
	for (int j = 2; j < i; j++) 
	{
		if (i % j == 0) 
		{
			numeroDivisores++;
		}
	}
				
	//se o numero de divisores entre 2 e N-1, inclusive, é zero
	//então N é primo
	if( numeroDivisores == 0 )
	{
		System.out.print("O numero " + i + " eh primo");
		System.out.println();
	}
				
	//reinicia o contador de divisores
	numeroDivisores = 0;
}

Aí vai minha sugestão de código. É claro que esse é o pior método para detectar números primos, pois ele testa cada solução. Mas ai você pode pesquisar outros métodos. Qualquer coisa estamos aí.

F

Tenho uma pergunta bem básica, como eu testo no interaction a seguinte classe?

class Matrizes {
  
  void imprimeMatriz(double[][] a) {  
    for (int i = 0; i < a.length; i++) {
      System.out.print("| ");
      for (int j = 0; j < a[i].length; j++) {
        System.out.print(a[i][j] + " ");
      } 
      System.out.println("|");
    }
  }
}
Criado 30 de junho de 2008
Ultima resposta 4 de jul. de 2008
Respostas 12
Participantes 5