# eingegebene Zahl -> nächste Primzahl ausgeben



## sarah1608 (7. Jan 2012)

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?


```
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 (7. Jan 2012)

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 (7. Jan 2012)

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: 


```
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 (7. Jan 2012)

Die Zeile: 


```
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 ?


```
while (prim == false);
```
 oder 
	
	
	
	





```
while (!prim);
```

VG


edit:
füge den else-Zweig hinzu:

```
if (erg == 0)
{
  ...
}
else
{
  prim=true; 
}
```

sonst Endlosschleife falls nicht die die nächste Zahl Prim ist


----------



## parabool (7. Jan 2012)

nochmal: nach dem 
	
	
	
	





```
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.


----------

