Räkna och skriv ut antal primtal, istället för att skriva ut varje primtal
Min kod:
public class Primes{
public static void main(String[] cmdLn){
int n = Integer.parseInt(cmdLn[0]);
for(int i = 2; i <= n; i++){
// count the proper divisors of i:
int pd = 0;
for(int k = 2; k < i; k++){
if (i % k == 0){
pd = pd + 1;
}
}
// i is a prime number if the number of proper divisors is 0!
if(pd == 0){
System.out.println(i);
}
}
}
}
Nu skriver programmet ut varje primtal som är mindre eller lika med (tex) 10, finns det någon som kan hjälpa och ge förslag på hur jag kan göra för att skriva antalet primtal mindre eller lika med 10 (dvs 4) istället för 2, 3, 5, 7?
josefinanord skrev:Min kod:
public class Primes{
public static void main(String[] cmdLn){
int n = Integer.parseInt(cmdLn[0]);
for(int i = 2; i <= n; i++){
// count the proper divisors of i:
int pd = 0;
for(int k = 2; k < i; k++){
if (i % k == 0){
pd = pd + 1;
}
}
// i is a prime number if the number of proper divisors is 0!
if(pd == 0){
System.out.println(i);
}
}
}
}
Nu skriver programmet ut varje primtal som är mindre eller lika med (tex) 10, finns det någon som kan hjälpa och ge förslag på hur jag kan göra för att skriva antalet primtal mindre eller lika med 10 (dvs 4) istället för 2, 3, 5, 7?
Inför en variabel int primeCount = 0.
Byt ut System.out.println(i) mot primeCount = primeCount + 1
Skriv ut primeCount efter den yttre for-slingan.
Ifall du vill skriva ut ett antal av något kommer du oftast behöva använda en variabel. Variabeln ska användas för att spara så många gånger av något som har hänt. I ditt fall ska det kollas hur många tal som är primtal. Exempel på variabel:
int antalPrimtal = 0;
Skapa din variabel innan du kollar vilka tal som är primtal.
I din kod kollar du redan ifall ett tal är ett primtal. Med kod blocket:
if ( pd == 0) {
System.out.println(i);
}
Istället för att skriva ut primtalet kan du öka variabeln som kollar hur många primtal som finns. Exempel:
if ( pd == 0) {
antalPrimtal += 1; //Ökar antalPrimtal tal 1
}
Varje gång ett tal är ett primtal kommer antalPrimtal att öka med 1. Det enda du behöver göra nu är att skriva ut resultatet. Detta kan göras längst ner, efter du har kollat vilka tal som är primtal. Exempel:
System.out.println( "Antal primtal: " + antalPrimtal ); //Exempel utskrift: "Antal primtal: 4"
När jag testar det så skrivs det bara ut ”Antal primtal: 1” fyra gånger istället :/
Hur ser koden ut?
public class Primes{
public static void main(String[] cmdLn){
int n = Integer.parseInt(cmdLn[0]);
for(int i = 2; i <= n; i++){
// count the proper divisors of i:
int pd = 0;
for(int k = 2; k < i; k++){
if (i % k == 0){
pd = pd + 1;
}
}
// i is a prime number if the number of proper divisors is 0!
int antalPrimtal = 0;
if(pd == 0){
antalPrimtal += 1;
System.out.println("Antal primtal: " + antalPrimtal);
}
}
}
}
Om vi kollar på koden ser vi att du skapar variabeln antalPrimtal innanför din yttersta for-loop. Detta betyder att du skapar variabeln om och om igen. Den skapas, det läggs till 1, sedan skrivs resultatet ut, skapa samma variabel igen och sätt den till 0, det läggs till 1, sedan skrivs resultatet ut. Kort och gott betyder detta att du återställer antalPrimtal varje gång du kollar ett tal. Ta raden:
int antalPrimtal = 0;
och flytta upp den innan din yttersta/första for-loop. Detta betyder att variabeln kommer skapas utanför loopen, och behålla sitt värde.
Okej men när jag gör det blir detta resultatet:
Antal primtal: 1
Antal primtal: 2
Antal primtal: 3
Antal primtal: 4
Samma sak här. Du har din kod för att skriva ut resultatet innanför din for-loop. Varje gång ett tal är ett primtal kommer antalPrimtal att öka med ett och så kommer den skriva ut resultatet. För att fixa detta måste du säga åt programmet att skriv ut antalPrimtal efter din for-loop.
Nu funkar det! Tack :D