skip to main content

kiesler.at

Hammingdistanz a la EPROG
updated by rck, 2004-11-06

Ich habe mal spaßhalber ein Programm aus der EPROG-Beispielsammlung umgesetzt. Es hat die Nummer 1074 und ermittelt die Hammingdistanz von ein paar übergebenen Codewörtern.

1 | 2 | 3 | 4 | 5 | 6

Fehlerüberprüfungen

Dieses Programm habe ich, anders als den Einheitenberechner "einfach runterprogrammiert". Zuerst galt es, die Fehlerfälle herauszuschreiben. Ich hab für die Fehlerfälle eigene Methoden geschrieben.

Vorteil: Lassen sich gut Dokumentieren, lassen sich später objektorientiert überschreiben (zB eine Unterklasse, die andere Einschränkungen hat), sieht sauberer aus, ist leichter zu warten.

Nachteil: Mehr Schreibarbeit.

Ich möchte zwei Beispiele vorstellen und hoffe, dass die anderen dadurch auch klar sind.

is_binary()

Ich verwende in diesem Programm zwei verschiedene Fehlerchecks. is_binary() ist einziger Vertreter der ersten Art: Eine Methode, die true zurückliefert, falls eine gewisse Eigenschaft gegeben ist. Und false, falls nicht.

29         public static boolean is_binary(String a)
30                 throws Exception {
31 
32                 for(int i=0; i<a.length(); i++)
33                         if((a.charAt(i) != '0') && (a.charAt(i) != '1'))
34                                 return(false);
35 
36                 return(true);
37         }

Beschreibung is_binary()

32 wir sehen uns alle Zeichen vom String an.
33 ist eines dabei, welches nicht 0 oder 1 ist...
34 ...liefern wir false zurück.

36 kommen wir bis hier her, können wir ruhigen Gewissens true zurückliefern, der String besteht nur aus gültigen Zeichen.

Eine alternative zu dieser Methode wäre ein Regexp Ausdruck, der ist allerdings dank Regexp vermutlich eine Spur langsamer (was egal wäre) und für EPROG meiner Meinung nach zu kryptisch (für mich ausschlaggebend).

check_wordcount()

check_wordcount() ist Vertreter der zweiten Gattung. Hier passiert original nichts, wenn die Bedingung gegeben ist. Ist die Bedingung (in diesem Fall: die Anzahl der Codewörter passt) nicht gegeben, gibt's eine Exception.

Die nette Fehlerbeschreibung der Exception erleichtert das Debugging. Sie wird im Hauptprogramm aber auf "FALSCHE EINGABE" reduziert, damit sich der EPROG-Abgaberoboter leichter tut.

66         public static void check_wordcount(int wordcount)
67                 throws Exception {
68 
69                 if(wordcount < 2)
70                         throw new Exception(wordcount+
71                                 " Codewörter sind zu wenig!");
72 
73                 if(wordcount > 8)
74                         throw new Exception(wordcount+
75                                 " Codewörter sind zu viel!");
76         }

Beschreibung check_wordcount()

67 nachdem wir eine Exception werfen wollen, müssen wir das dem Compiler auch bekanntgeben. Anderenfalls könnte er glauben, dass wir eine Exception übersehen haben und macht uns darauf aufmerksam.

69 haben wir zu wenig Wörter in der Eingabe bekommen...
70-71 ...gibt's eine Exception

73-75 im Fall von zu vielen Wörtern genauso.
1 | 2 | 3 | 4 | 5 | 6



RSSComments - Make a comment
The comments are owned by the poster. We are not responsible for its content.
RSSAll Articles
2008, 2007, 2006, 2005, 2004