8 svar
342 visningar
spirit0475 10 – Fd. Medlem
Postad: 24 nov 2020 17:18 Redigerad: 24 nov 2020 17:29

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?

Smutstvätt 25189 – Moderator
Postad: 24 nov 2020 17:53

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. :)

spirit0475 10 – Fd. Medlem
Postad: 24 nov 2020 18:34 Redigerad: 24 nov 2020 18:54

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.

Lindehaven 820 – Lärare
Postad: 24 nov 2020 18:40

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");
}
spirit0475 10 – Fd. Medlem
Postad: 24 nov 2020 18:47 Redigerad: 24 nov 2020 18:55

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? 

Lindehaven 820 – Lärare
Postad: 24 nov 2020 19:07
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

spirit0475 10 – Fd. Medlem
Postad: 24 nov 2020 19:24 Redigerad: 24 nov 2020 19:28

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.
     }
   }
   }
   }
Laguna Online 30686
Postad: 24 nov 2020 21:26

Vilken gräslig indentering. Kan du läsa det där själv?

Lindehaven 820 – Lärare
Postad: 25 nov 2020 00:12

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.

Svara
Close