carookee - group communication for you
Home / JavaForum / Beginner
Infos   |   Features   |   Gold-Edition   |   Kundenservice   
java
  Übersicht
  Forum
Beginner
Java allgemein
JDBC
JNI
Networking
Online-Ressourcen
Swing + AWT
XML
Meckerecke
  Mitglieder
LOGIN





· Passwort vergessen
· Kostenlos anmelden
  Information
  Demo
  Features
  Im Vergleich
  Anmeldung
SUCHE
Beiträge, Foren oder Verfasser finden:
  Kundenservice
  Impressum
  Datenschutz
  AGB
Status
5.097 User online
0 User eingeloggt
 

Beiträge
   Antworten     Neuer Beitrag    

Beitrag 405 von 2963 (14%) |<   <   >   >|

Autor DeaconFrost
Datum 07.12.05, 23:10
Betreff Re: Missing Return Statement, obwohl return Statement vorhanden ist


Hallo Johann,

Mir sind gleich 6 Dinge an der Methode aufgefallen.
1.) Es fehlt tatsächlich ein return und zwar für den Fall, dass die for-Schleife niemals durchlaufen wird. Das kann passieren, wenn zahl bereits zu Beginn >= divisor ist.
2.) Die Bedingung für die for-Schleife scheint mir genau verkehrt zu sein. Für einen Test der Teiler hätte ich divisor < zahl erwartet und nicht umgekehrt.
3.) Für einen Primzahltest muss man nicht alle Teiler kleiner als zahl prüfen. Es genügt alle Teiler kleiner Wurzel von zahl zu prüfen. Die Teiler treten nämlich immer paarweise auf, d.h. für entsprechende Teiler größer als Wurzel zahl gibt es auch immer einen Teiler kleiner als Wurzel zahl. Das Produkt aus diesem Paar gibt die ursprüngliche Zahl. Umgekehrt gilt, dass wenn es keinen Teiler kleiner Wurzel zahl gibt, dann gibt es auch keinen größer als Wurzel zahl. (Klar, womit sollte man multiplizieren, damit die Zahl rauskommt?) Die Bedingung könnte daher divisor <= Math.sqrt(zahl) lauten. Man erspart sich dadurch eine größere Zahl an Teilern.
4.) Die derzeitige Version von istPrimzahl prüft nur einen einzigen Teiler, nämlich 2. Ist 2 ein Teiler, dann bricht die Schleife ab (return true). Ist 2 kein Teiler, dann ebenfalls (return false).
5.) Negative Zahlen und 0 (Null) sollte die Methode gleich von vornherein ausschliessen (return false).
6.) Eine weitere Optimierung wäre, dass man nur 2 und alle ungeraden Teiler prüft, weil gerade Zahlen ja immer durch 2 teilbar sind.

Meine optimierte Version sähe so aus:

public static boolean istPrimzahl(int zahl)
{
    if (zahl <= 0) {
        return false;
    }
    else if (zahl == 2) {
        return true;
    }
    else if ((zahl % 2) == 0) {
        return false;
    }
    else {
        int größterTeiler = (int) Math.sqrt(zahl);
        for (int divisor = 3; divisor <= größterTeiler; divisor += 2) {
            if ((zahl % divisor) == 0) {
                return false;
            }
        }
    }
    return true;
}


[editiert: 07.12.05, 23:15 von ]


Diskussionsverlauf:
    Re: Missing Return Statement, obwohl return Statement vorhanden ist
        Re: Missing Return Statement, obwohl return Statement vorhanden ist
Missing Return Statement, obwohl return Statement vorhanden ist

 Auf diesen Beitrag antworten
 Neuen Beitrag verfassen


|<   <   >   >|

                                                                                                                                                                                                                           

Impressum  · Datenschutz  · AGB  · Infos  · Presse
Ein modernes Forum: teamturn.com