sunny13 Geschrieben 8. Februar 2009 Geschrieben 8. Februar 2009 Ich habe folgendes Programm gegeben: import java.util.Scanner; public class Primzahl { public static void main(String[] args) { Scanner myscan = new Scanner(System.in); // Scanner definieren int summe = 0; int i = 1; int p; System.out.println("Bitte geben Sie eine beliebige Zahl ein!!"); int zahl = myscan.nextInt(); // beliebige Zahl-Eingabe do { // do while Schleife if(zahl < 2) { break; //aus der do-while-Schleife raus springen } p = zahl % i; // modulo : eingegeben Zahl mod i if (p == 0) { summe = summe + i; } i++; } while (i < zahl); if (summe == 1) { System.out.println("ist Primzahl"); } else { System.out.println("ist keine Primzahl"); } }// Hauptprogramm }// class Kann mir jemand erklären, was dieser Programmteil p = zahl % i; // modulo : eingegeben Zahl mod i if (p == 0) { summe = summe + i; } aussagt? Zitieren
Mttkrb Geschrieben 8. Februar 2009 Geschrieben 8. Februar 2009 (bearbeitet) Hi, zahl wird ganzzahlig durch i geteilt und der rest an p übergeben. die if abfrage prüft anschließend nach ob p= 0 ist. Wenn ja wird der Code in den geschweiften Klammern ausgegeben. GRuß Jogibaer0411 Bearbeitet 8. Februar 2009 von Jogibaer0411 Zitieren
sunny13 Geschrieben 8. Februar 2009 Autor Geschrieben 8. Februar 2009 Das heißt ja das die eingegebene Zahl durch i (1 weil i = 1 deklariert wurde) geteilt wird. dann ist der Rest also p. Aber p wird ja eigentlich nie 0, oder habe ich da einen Denkfehler? Und wieso dann summe=summe+i ? und wieso wird i dann um 1 erhöht? (i++) Zitieren
drc83 Geschrieben 8. Februar 2009 Geschrieben 8. Februar 2009 (bearbeitet) Das heißt ja das die eingegebene Zahl durch i (1 weil i = 1 deklariert wurde) geteilt wird. dann ist der Rest also p. Aber p wird ja eigentlich nie 0, oder habe ich da einen Denkfehler? p wird immer dann 0, wenn die zu testende Zahl ohne Rest durch i teilbar ist. Eine Zahl darf nur durch sich selbst und 1 ohne Rest geteilt werden können, damit sie prim ist. Und wieso dann summe=summe+i ? und wieso wird i dann um 1 erhöht? (i++) Das Programm teilt die zu prüfende Zahl durch sämtliche Zahlen i=1..zahl-1, und merkt sich wie oft bei der Division kein Rest entsteht. Wenn das nur einmal der Fall ist (bei i=1), dann ist die Zahl prim. edit: äh, so sollte es wohl gedacht sein. lass mich das nochmal ansehen edit2: ja, wahrscheinlich sollte im programm statt "summe = summe + i;" stehen: "summe = summe + 1;" Es gibt aber effizientere Verfahren, um Primzahlen zu finden. Ebenfalls recht anschaulich ist das "Sieb des Eratosthenes": http://de.wikipedia.org/wiki/Sieb_des_Eratosthenes Bearbeitet 8. Februar 2009 von drc83 Zitieren
sunny13 Geschrieben 8. Februar 2009 Autor Geschrieben 8. Februar 2009 Ok dann ist das Klar... Kann mir auch jemand sagen wie das Quellcode aussieht wenn ich z.B. die 3456 testen soll ob es eine Primzahl ist oder nicht? Wenn möglich nach dem gleichen Schema wie ich das gemacht habe. Zitieren
drc83 Geschrieben 8. Februar 2009 Geschrieben 8. Februar 2009 Naja, das ist eine Klasse mit einer main-Methode...Du kannst sie also einfach aus Deiner Entwicklungsumgebung (benutzt Du eine?, welche? ) oder aus der Konsole starten. Die Eingabe Deiner Zahl 3456 machst Du dann im Programm, es fragt Dich in den beiden Zeilen danach: System.out.println("Bitte geben Sie eine beliebige Zahl ein!!"); int zahl = myscan.nextInt(); // beliebige Zahl-Eingabe Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.