Primzahlermittler

Dommas

Mitglied
Aufgabenstellung ist folgende:

Schreiben Sie ein Programm, welches für eine eingegebene Zahl ermittelt, ob diese eine Primzahl ist.

Ausgabe:
Bitte zu untersuchende Zahl eingeben: 47
Untersuchte Zahl ist eine Primzahl!

Prinzipiell hab ich das Problem mit folgendem Code schon gelöst

Java:
 import java.util.Scanner;
public class Test{
  public static void main(String[] args){
	Scanner scr = new Scanner(System.in);
	System.out.print("Bitte zu untersuchende Zahl eingeben: ");
	int z = scr.nextInt();
    int t = 2;
    scr.close();
 
   while (t < z)
     {
      if (z % t == 0){
      System.out.println(z + " ist keine Primzahl");
      System.exit(0);
     }
    t ++;
    }
   System.out.println(z + " ist eine Primzahl");
  }
}

Jetzt wollte ich das ganze mit einer for-Schleife Lösung, da die sich ja meines Wissens nach nicht groß von einer while-Schleife unterscheidet. Leider komme ich nach mehrmaligem korrigieren der vermeintlichen Lösung einfach nicht auf keinen grünen Zweig :(
Hoffe es kann mir jemand helfen.
 

Gucky

Top Contributor
Dann poste doch einmal deinen Versuch und wir werden dir helfen.
Den fertigen Code wird dir hier keiner servieren ;)
Hast du schon gegooglet?
 

Dommas

Mitglied
Java:
import java.util.Scanner;
public class Schleife {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scr = new Scanner(System.in);
		System.out.print("Geben sie die zu untersuchende Zahl ein: ");
		int z = scr.nextInt();
		scr.close();
		for (int k=2; k<=z;k++) {
			int m = z%k;
			if (m==0 && k!=z) {
				System.out.println("Untersuchte Zahl ist keine Primzahl");
			}
			else if (m!=0 && k!=z) {
				System.out.println("Untersuchte Zahl ist eine Primzahl");
			}
		}
	}
}

Denke das ich da einen ziemlichen Denkfehler drin habe...Komme aber beim besten Willen nicht drauf ???:L
 

Gucky

Top Contributor
Die Zwischenvariable m kannst du dir sparen. ;)
Was passiert denn, wenn du den Code ausführst?


PS: ja ich weiß, wo der Fehler liegt aber ich werde dir keinen Fisch geben, sondern dir zeigen, wie man angelt. ;)
 

Dommas

Mitglied
Für die 7

Untersuchte Zahl ist eine Primzahl
Untersuchte Zahl ist eine Primzahl
Untersuchte Zahl ist eine Primzahl
Untersuchte Zahl ist eine Primzahl
Untersuchte Zahl ist eine Primzahl

Für 8

Untersuchte Zahl ist keine Primzahl
Untersuchte Zahl ist eine Primzahl
Untersuchte Zahl ist keine Primzahl
Untersuchte Zahl ist eine Primzahl
Untersuchte Zahl ist eine Primzahl
Untersuchte Zahl ist eine Primzahl
 

Moro

Mitglied
Bei der Überführung einer while in einer for Schleife musst du nur die "Eckdaten" der Schleife ermitteln. Funktioniert die while-Schleife korrekt, gibt es keine Werte mehr, die du dort "hinzuerfinden" müsstest für eine for Schleife.

int t = 2; Ist die Initalisierung deiner Laufvariable.
t < z; ist deine Schleifenbedingung
t ++; Ist die Inkrementierung deiner Laufvariable in jedem Schleifendurchlauf

Entsprechend den Werten einfach in die for-Schleife einfügen. Der Code im Rumpf der Schleife ist dann wie gehabt, aber bei dir noch nicht optimal.

Java:
for (int t = 2; t < z; t++){
}

Du solltest es auf Teufel komm raus vermeiden, Schleifen zu programmieren bei den die Abbruchbedingung der Schleife nicht im Schleifenkopf ersichtlich ist. Wer später in Projekten auf deinen Code schaut, denkt die Schleife würde immer Laufen solange die Bedingung t < z erfüllt ist, insgeheim bricht die Schleife bei dir aber auch ab, sobald klar ist das die Zahl keine Primzahl ist.
Sprunganweisungen wie System.exit(0); oder break; solltest du nicht benutzen. Auch solltest du dir angewöhnen, deinen Variablen vernünftige Namen zu geben. z ist eine zahl, die auch so benannt werden darf. Auch das trägt zur Leserlichkeit des Codes bei. Bei so kleinen Code-Stücken mag das trivial erscheinen, aber später wird das ein durcheinander und du kannst deinen eigenen Code nicht mehr lesen, geschweige denn andere. Daher am besten gleich angewöhnen.

Wenn du auf Sprunganweisungen verzichten willst, bietet sich in deinem Fall ein boolscher Wert in der Schleifenbedingung an, durch den es dir möglich ist, die Schleife abzubrechen, sobald klar ist das deine zahl keine Primzahl ist.
Java:
Scanner scr = new Scanner(System.in);
System.out.print("Bitte zu untersuchende Zahl eingeben: ");
int zahl = scr.nextInt();
scr.close();
        
boolean istPrimzahl = true;
        
 for(int t = 2; t < zahl && istPrimzahl; t++){
          istPrimzahl = !(zahl % t == 0);
}

System.out.println("Ist " + zahl + " eine Primzahl? " + istPrimzahl);
 
Zuletzt bearbeitet:

Neue Themen


Oben