Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich bin dabei eine Aufgabe zu lösen und soweit so gut fast alles geschafft nur ein kleiner Fehler, denke ich mal, hat sich irgendwo eingeschlichen.
Also ich mache einen Primzahlenzähler, der zählt in einem vorgegebenen Raster nach Primzahlen und gibt sie dann aus. Das habe ich auch hinbekommen und lief ohne Probleme. Jetzt wollte ich, dass man zB aussuchen kann, dass er nur jede zweite oder dritte Primzahl ausgibt.
Das funktioniert leider gar nicht, er gibt mir nämlich gar nichts aus. Wo ist da der Fehler?
Java:
public class prim3 {
public static void main(String[] args) {
System.out.println("Bis zu welcher Zahl darf gesucht werden?");
int n = new java.util.Scanner( System.in ).nextInt(); //Zählraster wird festgelegt
System.out.println("Jede wievielte Primzahl soll angezeigt werden?");
int counter = new java.util.Scanner(System.in).nextInt(); //Ausgaberaster wird festgelegt
for (int i = 2;i<=n;i++){
boolean isPrimzahl = true;
for (int j = 2;j < i && isPrimzahl;j++){
if ((i % j)==0){
isPrimzahl = false;
}
counter--;
}
if(isPrimzahl && counter == 0 ){
System.out.println(i);
}
}
}
}
Du darfst counter nur dekrementieren, wenn eine Primzahl gefunden wurde. Du machst es aber bei jeder Iteration der inneren Schleife. Ausserdem mußt du counter nach Ausgabe einer Primzahl wieder auf den Ursprungswert zurück setzen.
Hallo,
ich hab das jetzt verstanden was du meinst, hab das bisschen umgeschrieben und es geht.
Java:
public class prim {
public static void main(String[] args) {
System.out.println("Bis zu welcher Zahl darf gesucht werden?");
int n = new java.util.Scanner( System.in ).nextInt(); //Zählraster wird festgelegt
System.out.println("Wieviele Primzahlen sollen angezeigt werden?");
int counter = new java.util.Scanner(System.in).nextInt(); //Ausgaberaster wird festgelegt
for (int i = 2;i<=n;i++){
boolean isPrimzahl = true;
for (int j = 2;j < i ;j++){
if ((i % j)==0){
isPrimzahl = false;
}
}
if(isPrimzahl){
counter--;
if(counter == 0)
System.out.println(i);
}
}
}
}
Jetzt wollte ich, dass er mir solange die dritte Primzahl ausgibt, bis "i" den Wert von "n" erreicht.
Dir fehlt eine Bedingung in der inneren Schleife und eine Resetwert!
Sowas:
Java:
System.out.println("Bis zu welcher Zahl darf gesucht werden?");
int n = new java.util.Scanner(System.in).nextInt(); // Zählraster wird
// festgelegt
System.out.println("Wieviele Primzahlen sollen angezeigt werden?");
int counter = new java.util.Scanner(System.in).nextInt(); // Ausgaberaster
// wird festgelegt
final int reset = counter;
for (int i = 2; i <= n; i++) {
boolean isPrimzahl = true;
for (int j = 2; isPrimzahl && j < i; j++) {
if (i % j == 0) {
isPrimzahl = false;
}
}
if (isPrimzahl) {
counter--;
if (counter == 0) {
System.out.println(i);
counter = reset;
}
}
}
Hier wie man das dann sauber macht:
Java:
Scanner sc = new Scanner(System.in);
System.out.println("Bis zu welcher Zahl darf gesucht werden?");
int n = sc.nextInt();
System.out.println("Jede wievielte Primzahl soll angezeigt werden?");
int counter = sc.nextInt();
next: for (int i = 2, c = 0; i <= n; i++) {
for (int j = 2; j < i; j++) {
if (i % j == 0) {
continue next;
}
}
if (++c == counter) {
System.out.println(i);
c = 0;
}
}