# Primzahl-Tester



## Ultraviolett (5. Sep 2014)

Hallo,

ich versuche gerade, ein Programm zu schreiben, dass für einen eingegebenen Integer ausgibt, ob es sich um eine Primzahl handelt, oder nicht. Aber irgendwie will das noch nicht so ganz:


```
import java.util.Scanner;

public class Primzahl {

	public static void main(String[] args) {
		
		Scanner input = new Scanner(System.in);
		int x =input.nextInt();
		input.close();
     
		int i;
		for (i =2;i<x;i++){
		int Rest= x%i;
		if (Rest==0){System.out.println("Keine Primzahl");break;}
		else {System.out.println("Primzahl");}
		}
	}
}
```
 


Die Idee war halt, dass Teiler zwischen 1 und der eingegeben Zahl geprüft werden und wenn einer glatt teilt, dann kann es sich nicht um eine Primzahl handeln. Aber das Programm liefert nicht immer eindeutige Antworten oder gibt mehrere "Primzahl"-Ausgaben hintereinander. Wenn ich jedoch ein zusätzliches break einfüge, wird der for-Teil als toter Code deklariert. :bahnhof:

Gruß


----------



## ssoul26 (5. Sep 2014)

Du musst nicht bis zu der Zahl gehen. Es reicht, wenn du alle Zahlen bis n/2  überprüfst, sparst dir Rechenzeit

Zu der Ausgabe:
Du springst, wenn != 0 immer in den Else-Zweig und gibst dort Primzahl aus. Daher wird dir auch mehrmal Primzahl ausgegeben. Bei Rest == 0, machst du einen Break ist richtig. Am besten du lagerst das in eine Methode aus, die boolean zurückgibt.


```
import java.util.Scanner;
public class primzahl {
   public static void main(String[] args) {
      Scanner input = new Scanner(System.in);
      int x = input.nextInt();
      input.close();
      int i;
      if (isPrime(x)) {
         System.out.println("Primzahl");
      } else {
         System.out.println("Keine Primzahl");
      }
   }

   private static boolean isPrime(int x) {
      for (int i = 2; i < x; i++) {
         int Rest = x % i;
         if (Rest == 0) {
            return false;
         }
      }
      return true;
   }
}
```


----------



## Ultraviolett (5. Sep 2014)

Ich mache gerade einen Java-Anfänger-Kurs, deswegen kenne ich nur sehr wenige Befehle.
Was hast du da gemacht mit " private static boolean isPrime(int x)" und den return-Befehlen?


----------



## ssoul26 (5. Sep 2014)

Ultraviolett hat gesagt.:


> Ich mache gerade einen Java-Anfänger-Kurs, deswegen kenne ich nur sehr wenige Befehle.
> Was hast du da gemacht mit " private static boolean isPrime(int x)" und den return-Befehlen?




```
//Hier wird eine neue Methode angelegt, die einen boolschen-Wert zurückgibt, also true oder false. Die Methode //bekommt als Parameter einen int-Wert übergeben. 
//static deswegen, da der gesamte Kontext static ist, also die Methode in der Main-Klasse liegt. Würde die Methode /nicht im Main aufgerufen werden, so könnte sie auch nicht static sein. Diesbezüglich würde ich dir google empfehlen.
private static boolean isPrime(int x) {
for (int i = 2; i < x; i++) {
int Rest = x % i;
if (Rest == 0) {
return false;
}
}
return true;
}
```


----------

