eingegebene Zahl -> nächste Primzahl ausgeben

sarah1608

Neues Mitglied
Hallo :)
ich habe hier ein Javaprogramm, das eigentlich zur eingegebnen Zahl die nächst größere Primzahl ausgeben soll. Allerdings rechnet er nur plus eins und gibt aus, ob diese Zahl eine Primzahl ist oder nicht.. Wo ist mein Fehler?

Java:
import java.io.*;
public class Primzahl2
{
  public static void main(String argv[]) throws IOException
  {
    BufferedReader in = new BufferedReader (new InputStreamReader(System.in));
    int zahl;
    int div;
    int erg;
    boolean prim;
    prim = true;
    div = 2;
    System.out.println(" - Primzahl-Test -");
    System.out.println(" -------------");
    System.out.print("Bitte Zahl eingeben:");
    zahl = Integer.parseInt(in.readLine());

    do {
       zahl=zahl+1;

       while((zahl-1)>=div)
       {
         erg = zahl % div;
           if (erg == 0)
             {
                 System.out.println(zahl+ " ist KEINE Primzahl");
                 prim = false;
                 break;
             }
             div++;

       }
        if (prim==true)
        {
          System.out.println(zahl+ " ist eine Primzahl");
        }
        
    } while (prim == true);
  }
}
 

Fab1

Top Contributor
Am einfachsten ist es, wenn du dir einen Breakpoint setzt und dann Schritt für Schritt dein Programm durchgehst, somit findest du auch sicherlich die Fehlerquelle.
 

sarah1608

Neues Mitglied
Vielen Dank für den Hinweis :)
hatte dadurch den Fehler bei dem ersten Programm, das ich dazu gemacht habe, gefunden.

Falls es jemanden interessiert, wäre dies eine mögliche Lösung:

Java:
  import java.io.*;
  public  class Teiler
  {
          public  static  void main( String[ ] args )
          throws IOException
          {
                int n;
                boolean prim;

                 BufferedReader din = new BufferedReader (
                                      new InputStreamReader ( System.in ));

                 System.out.println ("Bitte n eingeben: ");
                 n=Integer.parseInt (din.readLine());

                 int i;  // Teste n auf Teiler:
                   do
                    { n=n+1;


                    if (n%2==0)
                     {
                      prim=false;// 2 teilt n
                     }
                    else // 2 teilt n nicht!
                     {   i=3; // teste 3,5,7,9,...
                        double ns=Math.sqrt(n); // nur bis zur Wurzel nötig
                        while (i<=ns)
                         {   if (n%i==0) // Teiler gefunden!
                               {
                                    prim=false;
                                    break; // Schleife wird abgebrochen
                                }
                                  i+=2;
                         }
                         if (i>ns) {
                          System.out.println(n+" ist eine Primzahl.");
                          prim = true;
                          break;              // In diesem Fall wurde kein Teiler gefunden.
                         }
                      }
                    }
                    while(prim = true);
          }
  }
 

parabool

Bekanntes Mitglied
Die Zeile:

Java:
while (prim == true);

bedeutet dass die Schleife wiederholt wird wenn eine Primzahl gefunden ist.
Es sollte dich aber so sein dass das geschieht solange dem so ist ?

Java:
while (prim == false);
oder
Java:
while (!prim);

VG


edit:
füge den else-Zweig hinzu:
Java:
if (erg == 0)
{
  ...
}
else
{
  prim=true; 
}

sonst Endlosschleife falls nicht die die nächste Zahl Prim ist
 
Zuletzt bearbeitet:

parabool

Bekanntes Mitglied
nochmal: nach dem
Java:
do{
noch die variable div auf 2 zurücksetzen

und generell vllt. das Programm in mehrere Methoden unterteilen, wird übersichtlicher.
z.B. isPrim(int zahl) würde sich z.B anbieten.
 
Zuletzt bearbeitet:

Neue Themen


Oben