9 svar
541 visningar
josefinanord behöver inte mer hjälp
josefinanord 103 – Fd. Medlem
Postad: 18 sep 2018 14:22

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?

Yngve 40279 – Livehjälpare
Postad: 18 sep 2018 14:57
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.

IGIL 43
Postad: 18 sep 2018 16:31 Redigerad: 18 sep 2018 16:34

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"


josefinanord 103 – Fd. Medlem
Postad: 18 sep 2018 16:40

När jag testar det så skrivs det bara ut ”Antal primtal: 1” fyra gånger istället :/

IGIL 43
Postad: 18 sep 2018 16:47

Hur ser koden ut?

josefinanord 103 – Fd. Medlem
Postad: 18 sep 2018 16:48

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

}
}
}

IGIL 43
Postad: 18 sep 2018 16:54

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.

josefinanord 103 – Fd. Medlem
Postad: 18 sep 2018 17:16

Okej men när jag gör det blir detta resultatet:

Antal primtal: 1

Antal primtal: 2

Antal primtal: 3

Antal primtal: 4

IGIL 43
Postad: 18 sep 2018 17:19 Redigerad: 18 sep 2018 17:19

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.

josefinanord 103 – Fd. Medlem
Postad: 18 sep 2018 17:28

Nu funkar det! Tack :D

Svara
Close