eu quero exibir os valores que sejam primos entre dois numeros digitados, porem estou fazendo isso atraves de metodos (que estou aprendendo na facu). Faco uma verificacao e caso seja primo, guarde em um array e vai fazedno ate ter tido todos os primos… entao eu nao sei como vou fazer por exemplo se digitar 10 e 20 tem que me mostrar 11, 13, 17, 19. Seria um array com 4 posicoes… agora se eu digitar 1 e 10000 ou 487 e 5784. Será totalmente aleatorio o valor do array, porem nao sei como fazer isso…
se nao tiver sido claro, me avisem… bom segue o que eu fiz… contudo não rolou
packagejavaapplication15;importjavax.swing.JOptionPane;publicclassMain{publicstaticvoidmain(String[]args){for(intsaida:isPrimo()){System.out.println(saida);}}privatestaticintrecebeValor(){returnInteger.parseInt(JOptionPane.showInputDialog("Insira um valor numérico"));}privatestaticint[]isPrimo(){intprimeiroValor=0;intsegundoValor=0;intcont=0;intresto=0;intvalorSaida[]=newint[cont];primeiroValor=recebeValor();segundoValor=recebeValor();while(primeiroValor<=segundoValor){for(inti=2;i<primeiroValor;i++){resto=primeiroValor%i;if(resto==0){break;}}if(resto!=0){valorSaida[cont]=primeiroValor;cont++;}primeiroValor++;}returnvalorSaida;}}
a duvida é no array valorSaida[cont]… deixei cont como 0 e caso seja primo incremente… porem nao vai… como faco?
Crie um array suficientemente grande para caber todos os números. Mas acho que nem precisa de array para guardar esses números, é só ir verificando, na faixa entre o menor e o maior, se cada número é primo.
renamed
Olá.
Por que você precisa de um array para escrever os primos entre dois números? você não pode, simplesmente, ir verificando e, assim que encontrar um primo, escrevê-lo na tela?
Caso você ainda precise manter todos os números primos, reconsidere sua implementação utilizando um objeto da interface List.
ok?
britotr
renamed:
Olá.
você não pode, simplesmente, ir verificando e, assim que encontrar um primo, escrevê-lo na tela?
hahahaha… foi uma boa pergunta… não havia pensado nisso…
ficaria assim
packagejavaapplication15;importjavax.swing.JOptionPane;publicclassMain{publicstaticvoidmain(String[]args){isPrimo();/*for (int saida : isPrimo()) { System.out.println(saida); }*/}privatestaticintrecebeValor(){returnInteger.parseInt(JOptionPane.showInputDialog("Insira um valor numérico"));}privatestaticintisPrimo(){intprimeiroValor=0;intsegundoValor=0;//int cont = 0;intresto=0;//int valorSaida[] = new int[cont];primeiroValor=recebeValor();segundoValor=recebeValor();while(primeiroValor<=segundoValor){for(inti=2;i<primeiroValor;i++){resto=primeiroValor%i;if(resto==0){break;}}if(resto!=0){// valorSaida[cont] = primeiroValor;// cont++;System.out.println(primeiroValor);}primeiroValor++;}return0;}}
o problema é que irei precisar dos numeros para algumas outras coisas que tenho em mente ainda… por isso queria colocá-los em um array, entretanto dessa forma como você mencionou de utilizar um objeto de interface list eu não sei como usar… poderia alterar o meu codigo exemplificando para eu ver?
valeu
pedroroxd
Você vai adicionando eles num ArrayList.
Fiz o seu exemplo com o ArrayList com console:
//seu packageimportjava.util.ArrayList;importjava.util.List;importjava.util.Scanner;publicclassPrimosEntre{publicstaticvoidmain(String[]args){intprimeiroValor=0,segundoValor=0,resto=0;List<Integer>lista=newArrayList<Integer>();/* * obriga o usuário a digitar valores válidos(o primeiro valor tem que * ser menor que o segundo valor, ou seja, não pode ser maior ou igual */while(primeiroValor>=segundoValor){primeiroValor=recebeValor();segundoValor=recebeValor();if(primeiroValor>=segundoValor)System.out.println("O primeiro valor deve ser menor que o segundo\n");}// faz a varredura dos números entre eleswhile(primeiroValor<=segundoValor){//verifica se não é primofor(inti=2;i<primeiroValor;i++){resto=primeiroValor%i;if(resto==0){break;}}//se for primo adiciona na listaif(resto!=0){lista.add(primeiroValor);}primeiroValor++;}//imprime a listaSystem.out.println("\nOs primos são:\n"+lista);}privatestaticintrecebeValor(){System.out.println("Insira um valor numérico");returnnewScanner(System.in).nextInt();}}
britotr
entendi o que vc fez… estou apenas com um problema… estou fazendo isso dentro de um metodo…
porem dá erro de imcompatibilidade no retorno… como faço pra arrumar?
renamed
Veja esse exemplo sem List:
packageprimos;importjava.util.Scanner;publicclassPrinc{/** * Aqui leremos dois limites, um inferior e outro superior e vamos calcular os números primos entre * esse intervalo. Quando o limite for maior que o fim, saimos do loop */publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);System.out.print("Digite limite inferior: ");intcomeco=Integer.parseInt(sc.nextLine());System.out.print("Digite limite superior: ");intfim=Integer.parseInt(sc.nextLine());while(comeco<fim){listaPrimos(comeco,fim);System.out.print("Digite limite inferior: ");comeco=Integer.parseInt(sc.nextLine());System.out.print("Digite limite superior: ");fim=Integer.parseInt(sc.nextLine());}}/** * Lista todos os primos que estão no intervalo */publicstaticvoidlistaPrimos(intcomeco,intfim){for(inti=comeco;i<fim;i++){if(ehPrimo(i)){System.out.println(i);}}}/** * Verifica se um número é primo. Para verificar se um número é primo, basta procurar * até sua raiz quadrada, se até lá ele não for divisível por qualquer outro número além do 1, * ele não será por nenhum outro */publicstaticbooleanehPrimo(intnumero){intraiz=(int)Math.sqrt(numero);for(inti=2;i<=raiz;i++){if((numero%i)==0){returnfalse;}}returntrue;}}
Desculpe o código assim, mas o sono ta batendo!
pedroroxd
olha o tipo do retorno do método que você declarou e o que você está tentando retornar…
ArrayList não é um vetor de int…
mude de private static int[] isPrimo() {
para
privatestaticListisPrimo(){
renamed
E aqui está um exemplo com List…
packageprimos;importjava.util.ArrayList;importjava.util.Collections;importjava.util.List;importjava.util.Scanner;publicclassPrinc{/** * Manteremos, aqui, uma lista dos números primos que já conhecemos */privatestaticList<Integer>lstNumerosPrimosConhecidos=newArrayList<Integer>();/** * Aqui leremos dois limites, um inferior e outro superior e vamos calcular os números primos entre * esse intervalo. Quando o limite for maior que o fim, saimos do loop */publicstaticvoidmain(String[]args){Scannersc=newScanner(System.in);System.out.print("Digite limite inferior: ");intcomeco=Integer.parseInt(sc.nextLine());System.out.print("Digite limite superior: ");intfim=Integer.parseInt(sc.nextLine());while(comeco<fim){listaPrimos(comeco,fim);System.out.print("Digite limite inferior: ");comeco=Integer.parseInt(sc.nextLine());System.out.print("Digite limite superior: ");fim=Integer.parseInt(sc.nextLine());}}/** * Lista todos os primos que estão no intervalo */publicstaticvoidlistaPrimos(intcomeco,intfim){for(inti=comeco;i<fim;i++){if(ehPrimo(i)){System.out.println(i);}}}/** * Verifica se um número é primo. */publicstaticbooleanehPrimo(intnumero){/** * A primeira coisa que fazemos é ordenar nossa lista de primos já conhecidos. * Essa ordenação é necessária para realizarmos uma busca binária */Collections.sort(lstNumerosPrimosConhecidos);/** * Fazemos uma busca binária na nossa lista de números primos. Se a busca retornar maior que zero, * o número já é um número primos conhecido, então retornamos true. */if(Collections.binarySearch(lstNumerosPrimosConhecidos,numero)>0){returntrue;}/** * Se chegar aqui, ou o número é primo e não o conhecemos ou ele não é primo. * Para verificar se um número é primo, basta procurar * até sua raiz quadrada, se até lá ele não for divisível por qualquer outro número além do 1, * ele não será por nenhum outro */intraiz=(int)Math.sqrt(numero);for(inti=2;i<=raiz;i++){if((numero%i)==0){returnfalse;}}/** * Se chegar aqui ele é primo e não o conhecíamos ainda, então o adicionamos na lista de primos */lstNumerosPrimosConhecidos.add(newInteger(numero));returntrue;}}
Se você quiser também pode criar uma lista de não primos, tentando evitar ao máximo que o algoritmo calcule valores repetidos (esse algoritmo sempre verifica se um número não primo é primo, isso seria evitado com essa nova lista)…
ok?
britotr
Perfeito cara… era isso mesmo que eu queria e consegui graças a ajuda de vocês… hehehe… valeu a todos!!!
pedroroxd
Depois só dá uma olhada de diferença entre Vector, ArrayList, int[]
Depois adiciona [RESOLVIDO] ao assunto do tópico