Primzahltest

paco89

Bekanntes Mitglied
hallo, ich hatte folgende aufgabe:

Eine Primzahl ist eine Zahl, die nur durch 1 und sich selbst teilbar ist.

1)Schreibe eine Funktion boolean isPrime(int n), die für eine gegebene, positive ganze Zahl n>=2 feststellt, ob diese Zahl eine Primzahl ist oder nicht.
2)Rufe die Funktion mit ein paar Testwerten auf und gib auf dem Bildschirm eine Meldung wie "... ist Primzahl" bzw. "... ist keine Primzahl" aus.
3)Benutze die Funktion isPrime(), um die ersten 100 Primzahlen auszugeben.



den ersten Teil habe ich mit folgendem code gelöst:

Java:
public class Primzahlen
{ 
  static boolean isPrime(int n)
  {
      int zaehler = 2;
      boolean value = true;
      
      while(zaehler < n)
      {
        if( (n%zaehler)==0 )
        {
          value=false;
        }
          zaehler++;
      
      }
     
      return value;
      
      
  }

    public static void main(String[] args)
    { 
      System.out.println("Bitte geben Sie eine Zahl ein: ");
      int a = Integer.parseInt(System.console().readLine());
      System.out.println(isPrime(a));
      
      
    }
 }

für die zweite teilaufgabe habe ich den code geändert zu:

Java:
public class Primzahlen
{ 
  static boolean isPrime(int n)
  {
      int zaehler = 2;
      boolean value = true;
      
      while(zaehler < n)
      {
        if( (n%zaehler)==0 )
        {
          value=false;
        }
          zaehler++;
      
      }
     
      return value;
      
      if (value == true)
        System.out.println("Die eingegebene Zahl ist eine Primzahl");
        
      else
        System.out.println("Die eingegebene Zahl ist keine Primzahl");
        
      
      
  }
  
 
     public static void main(String[] args)
    { 
      System.out.println("Bitte geben Sie eine Zahl ein: ");
      int a = Integer.parseInt(System.console().readLine());
      System.out.println(isPrime(a));
      
      
    }
 }

der erste code kompiliert aber der zweite nicht. in zeile 20 soll ein "unreacheable statement" sein...und in zeile 28 ein "missing return statement".

wie kann man das verbessern....;(



edit: an der dritten aufgabe arbeite ich noch....;)
 
Zuletzt bearbeitet:
M

Marcinek

Gast
Wenn du nach
Code:
 return value;
code stehen hast, dann ist dieser unereichbar.
 

Fab1

Top Contributor
in zeile 20 soll ein "unreacheable statement" sein

und in zeile 28 ein "missing return statement".

unreacheable statement tritt auf, daher nach dem return value; die Methode beendet ist und somit die If-Anweisung nie aufgerufen wird.

In Zeile 28 steht bei mir kein Code :)

Hier mein Ansatz für dein Problem:


Die Abfrage der Zahl hab ich ein bisschen abgeändert, bei mir kam immer ne NullPointerException, wusste nicht wirklich was deine macht bzw. braucht.

Java:
import java.util.Scanner;

public class Test
{ 
  static boolean isPrime(int n)
  {
      int zaehler = 2;
      boolean value = true;
      
      while(zaehler < n)
      {
        if( (n%zaehler)==0 )
        {
          value=false;
        }
          zaehler++;
      
      }
     
      return value;
       
  }
  
     public static void main(String[] args)
    { 
      System.out.println("Bitte geben Sie eine Zahl ein: ");
      Scanner sc = new Scanner(System.in);
      int a = sc.nextInt();
     // System.out.println(isPrime(a));
      
      if (isPrime(a)){
    	  System.out.println("Die eingegebene Zahl ist eine Primzahl");
      }
             
        else{
        	 System.out.println("Die eingegebene Zahl ist keine Primzahl");
        }
    }
 }

Marcinek war mal wieder schneller, naja egal :)
 
Zuletzt bearbeitet:

paco89

Bekanntes Mitglied
ah okay, dass mit dem return merke ich mir.


vielen dank...;)

ich mach mich mal jetzt an die teilaufgabe 3 heran..,;)


edit: ich habe leider zu der 3. teilaufgabe gar keinen ansatz. ich habe mir überlegt, eine schleife zu benutzen und sie mit der neuen methode isPrime() zu kombinieren, die die vorherige methode istPrime (int n) rekursiv aufruft. ich weiß aber nicht wie ich das implementieren kann....


also ich meinte sowas hier:

Java:
public class Primzahlen
{ 
  static boolean isPrime(int n)
  {
      int zaehler = 2;
      boolean value = true;
      
      while(zaehler < n)
      {
        if( (n%zaehler)==0 )
        {
          value=false;
        }
          zaehler++;
      
      }
     
      return value;
      
      
  }
  static int isPrime()
  {
    for(int zaehler = 0; zaehler<1000; zaehler++)
    {
      isPrime(zaehler);
      
      if(isPrime(zaehler))
        System.out.println(zaehler);
    }
    return isPrime();
  }
    
    public static void main(String[] args)
    { 
      System.out.println("Bitte geben Sie eine Zahl ein: ");
      int a = Integer.parseInt(System.console().readLine());
      System.out.println(isPrime(a));
      
      if(isPrime(a))
        {
          System.out.println("Die eingegebene Zahl ist eine Primzahl.");
        }
        
      else  
        System.out.println("Die eingegebene Zahl ist eine Primzahl.");
        
    isPrime();
        
    }
 
 }


ich weiß dass der code nicht kompiliert, aber was besseres ist mir im moment nicht eingefallen
 
Zuletzt bearbeitet:
Y

yyannekk

Gast
3)Benutze die Funktion isPrime(), um die ersten 100 Primzahlen auszugeben.

Ich vermute du sollst hier nicht noch eine Funktion isPrime() erzeugen sondern die bereits vorhandene
isPrime(int) verwenden um die Primzahlen zwischen 1 und 100 zu ermitteln.
Also im Prinziep nur das was du in isPrime() machst...
 

Kiri

Bekanntes Mitglied
Aufgabe 3 könnte ganz einfach so aussehen. Vorausgesetzt isPrime() funktioniert - ich habe es mir nicht angeschaut.

Java:
public static void aufgabe3()
{
    for(int i = 1; i <= 100; i+=2)
    {
        if(isPrime(i))
        {
            System.out.println(i);
        }
    }
}
 
Zuletzt bearbeitet:
I

irgendjemand

Gast
um vllt noch einen mathematischen hintergrund einzuwerfen

es reicht wenn man nur 2 bis wurzel(n) berechnet anstatt 2 bis n ... *steht auch bei wikipedia*
auch ist deine mathematische definition der primzahl nicht ganz korrekt ...

eine primzahl ist eine zahl die sich nur durch 1 und sich selbst OHNE REST teilen lässt ... mit rest kannst du alle zahlen durch alle teilen ...

Java:
static int isPrime()
  {
    for(int zaehler = 0; zaehler<1000; zaehler++)
    {
      isPrime(zaehler);
      
      if(isPrime(zaehler))
        System.out.println(zaehler);
    }
    return isPrime();
  }
sorry ... aber was soll das denn ?
erst rufst du "isPrime(int)" auf ... speicherst den returnten bool aber nirgends und callst dann "isPrime(int)" innerhalb des if() ein zweites mal ?
das ist sehr unperformant ...

entweder du callst die methode dierekt im if() EINMAL ...
oder außerhalb davon und speicherst den return-wert irgendwo ... aber eine methode ZWEI MAL dierekt hinter ein ander callen kann bei komplexeren dingen sehr schnell zu schweren fehlern führen

also entweder
Java:
static int isPrime()
  {
    for(int zaehler = 0; zaehler<1000; zaehler++)
    {
      if(isPrime(zaehler))
        System.out.println(zaehler);
    }
    return isPrime();
  }
oder
Java:
static int isPrime()
  {
    for(int zaehler = 0; zaehler<1000; zaehler++)
    {
      boolean prime=isPrime(zaehler);
      
      if(prime)
        System.out.println(zaehler);
    }
    return isPrime();
  }

aber das was du da gemacht hast führt spätestens bei network-i/o , stacks oder vergleichbarem sofort beim ersten call zu fehlern ...
 

Kiri

Bekanntes Mitglied
Editieren nicht mehr möglich, deshalb verbesser ich mich hier selbst. Die for-Schleife muss wie folgt aussehen, bei der vorherigen hatte ich die Ziffer 2 vergessen!

Aufgabe 3 könnte ganz einfach so aussehen. Vorausgesetzt isPrime() funktioniert - ich habe es mir nicht angeschaut.

Java:
public static void aufgabe3()
{
    for(int i = 2; i <= 100; i++)
    {
        if(isPrime(i))
        {
            System.out.println(i);
        }
    }
}
 

Ähnliche Java Themen


Oben