Ae galera to fazendo esse programinha bobo pra brinca com o Java… Mas qdo eu executo a seguinte exeption aparece: “Exception in thread “main” java.lang.OutOfMemoryError: Java heap space
at TestePrimoAp.main(TestePrimoAp.java:14)”
Oq poderia ser?
agradeço desde já.
longterminou=newDate().getTime();strout+="Máximo para um Natural = "+MAXNAT+“\n”+"Raiz quadrada de "+MAXNAT+" = "+n+“\n”+"Quantidade de Primos = "+(p+1)+“\n”+"O último Primo gerado = "+Primos[p]+“\n”+"O último Primo é o 1º maior que "+n+“\n\n”+“TerminouExecução=" + new Date().toLocaleString() + "\n”+“TempodeExecução=" + (terminou - iniciou) + "ms\n\n”;JOptionPane.showMessageDialog(null,strout,titulo,JOptionPane.WARNING_MESSAGE);
}
B
Bruno_Laturner
O número até que é pequeno. Só não estou vendo onde k ou j volta pra zero para poder fazer os teste p/ o próximo primo.
F
felipehpd
E como faço isso?
Algoritmo ta errado?
a codificação?
B
Bruno_Laturner
felipehpd:
publicclassTestePrimoAp{publicstaticvoidmain(Stringargs[]){intn=(int)Math.sqrt[telefoneremovido]);intPrimos[]=newint[n];intj=1;// o que é j?intk=3;// o que é k?intLimX=0// hum?intx=0;// x é sempre zero?Primos[1]=2;Primos[2]=3;// só dá pra ter idéia do que este programa// for(inti=5;i<=n;i+=2){// o que ser i?LimX=(int)Math.sqrt(i);while(j<=LimX){if(x%Primos[j]!=0){Primos[k]=x;k++;// o que é k?}j++;// e j? nunca volta pra zero, tem que iterar por todos os elementos né?}}for(intl=1;l<=n;l++){System.out.println(Primos[l]);}}}
Debugue aí! Certeza que isso funciona?
F
felipehpd
publicclassTestePrimoAp{publicstaticvoidmain(Stringargs[]){intn=(int)Math.sqrt[telefoneremovido]);intPrimos[]=newint[n];intj=1;//Variavel de controle que corre em Primos, pra capturar os divisoresintk=3;// variavel de controle de inclusao em PrimosintLimX=0;//Limite de divisoesPrimos[1]=2;Primos[2]=3;for(inti=5;i<=n;i+=2){//variavel de controle que representa os candidatos a primoLimX=(int)Math.sqrt(i);while(Primos[j]<=LimX){if(i%Primos[j]!=0){Primos[k]=i;k++;}j++;//j volta ao valor inicial "1"no proximo laço for, ou seja, i=6... }}for(intl=1;l<=n;l++){System.out.println(Primos[l]);}}}
F
felipehpd
up
B
Bruno_Laturner
O algorítimo funciona p/ valores bem menores? Raiz de 100, 10000, etc?
F
felipehpd
O algoritmo funciona fiz teste de mesa diversas vezes…
eu to fazendo alguma merda na codificação… mas num consigo ver oq é…
eu to achando que tem algo errado com alguma coisa entre o for e o if.
B
Bruno_Laturner
Bem, se tá certo, tudo bem…
Esse array que ele gera tem umas 31622 posições, certo? Isso vai dar cerca de 123 KB, o que não é uma valor muito alto.
O ultimo primo dessa sequencia não deve ter um valor acima de 400 mil.
Aqui eu preciso declarar um array com 100 milhões de inteiros p/ dar java.lang.OutOfMemoryError: Java heap space, você nem chegou perto disso (a menos que esteja usando pouquissima memória, como se tivesse desenvolvendo em um celular). Então não deveria ter problemas quanto a falta de memória.