Kolla vilka tal som är primtal med hjälp av array
Hej! uppgiften jag försöker lösa är att jag med hjälp av array ska kunna se vilka av de tal jag skriver i som är primtal
Min kod:
import java.util.Scanner;
import java.lang.Math;
class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Hur många tal har du?");
int antal = input.nextInt();
int[] talen = new int[antal];
for (int i = 0; i < talen.length; i++) {
System.out.print("Tal nr "+(i+1)+" = ");
talen[i] = input.nextInt();
}
System.out.println("nu ska du få veta om de är primtal eller ej");
for (int i = 0; i <= Math.sqrt(talen.length); i=i + 1) {
if(talen[i] % i == 0 ) {
System.out.println(talen[i]+" är inte ett primtal");
}
//Här kollas det om talet är ett Primtal eller ej.
else {
System.out.println(talen[i]+" är ett primtal"); // Om talet inte går att dela med något av talen innan så körs denna del, vilket betyder att det är ett primtal.
}
}
}
}
Jag skriver in mina tal utan problem, men när programet ska vi vilka som är primtal och inte så får jag upp detta meddelande.Se bilden
Vad har jag gjort för fel i min kod?
Någonstans i koden dividerar du med noll. Jag tror att det är dessa rader:
if(talen[i] % i == 0 ) {
System.out.println(talen[i]+" är inte ett primtal");
}
som ställer till det. i går ju från noll till talen.length. :)
Jag fixade till så att i börjar på 2 istället. Vilket löste det problemet. Men nu vill den bara skriva om det tredje talet är ett primtal eller ej.
vet inte riktigt varför den gör det. för den borde väll testa om alla tal är primtal och inte bara det trejde talet. Ser inte varför den bara skulle kolla tal 3.
Det finns även ett logiskt fel. Anta att man anger 3 som tal nr 4. Då läggs värdet 3 i talen[3]
. Följande kod kommer då felaktigt att meddela att 3 inte är ett primtal.
if(talen[i] % i == 0 ) {
System.out.println(talen[i]+" är inte ett primtal");
}
Men meddelar den inte bara att talet 3 inte är ett primtal om t,ex 3/2 har 0 i rest? För det är ju en If sats innan så den säger ju bara att talet inte är ett primtal om talet efter division har 0 i rest. Men hur fixar man felet att den bara kollar om tal nr. 3 är ett primtal eller ej?
spirit0475 skrev:Men meddelar den inte bara att talet 3 inte är ett primtal om t,ex 3/2 har 0 i rest?
Talet 3 är ett primtal. Om talen[3] == 3 så blir talen[3] % 3 == 0 och då skriver programmet felaktigt "3 är inte ett primtal".
Fördet är ju en If sats innan så den säger ju bara att talet inte är ett primtal om talet efter division har 0 i rest. Men hur fixar man felet att den bara kollar om tal nr. 3 är ett primtal eller ej?
Som sagt, koden kollar inte primtal på ett korrekt sätt. Men Math.sqrt(talen.length) begränsar hur många iterationer det blir i slingan
Hur löser jag det logiska problemet på enkelt sett?
Min kod ser nu ut så här
import java.util.Scanner;
import java.lang.Math;
class Main {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Hur många tal har du?");
int antal = input.nextInt();
int[] talen = new int[antal];
for (int i = 0; i < talen.length; i++) {
System.out.print("Tal nr "+(i+1)+" = ");
talen[i] = input.nextInt();
}//här kollar vi först hur många tal vi har och skriver in våra tal
for (int i = 2; i < Math.sqrt(talen[i]); i=i + 1) {
if(talen[i] % i == 0 ) {
System.out.println(talen[i]+" är inte ett primtal");
}
//Här kollas det om talet är ett Primtal eller ej.
else {
System.out.println(talen[i]+" är ett primtal"); // Om talet inte går att dela med något av talen innan så körs denna del, vilket betyder att det är ett primtal.
}
}
}
}
Vilken gräslig indentering. Kan du läsa det där själv?
Ett enkelt sätt är att använda en färdig lösning. Men du lär dig mer om du först tar reda på hur en algoritm fungerar och sedan skriver programmet själv.