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

Das Hauptprogramm

Hier passiert eigentlich nicht mehr besonders viel. Auf eine Verwendung der Eprog-Eingaberoutinen habe ich verzichtet; bei einer ungültigen Eingabe könnte sich das Programm nämlich aufhängen, siehe auch Artikel zur eprog.jar. Unsere main() ist dennoch sehr kompakt, weil die Arbeit auf viele Methoden aufgeteilt ist.

Man könnte theoretisch die distance(String) in die main() umsiedeln. Vorteil: ??? Nachteil: Wiederverwertung (siehe auch Folgerunden) wird erschwert. Ist also keine gute Idee.

206         public static void main(String[] args) {
207                 // Nachdem die eprog-Bibliothek buggy ist
208                 // (siehe http://www.kiesler.at/article53.html)
209                 // hier die ausprogrammierte Variante.
210                 //
211                 // ist erlaubt, benutzt nur das JDK.
212 
213                 InputStreamReader ins=new InputStreamReader(System.in);
214                 BufferedReader reader=new BufferedReader(ins);
215 
216                 try {
217 
218                         EprogIO.println("HD="+distance(reader.readLine()));
219 
220                 } catch(NumberFormatException nfe) {
221 
222                         EprogIO.println(SYNTACTIC_ERROR);
223 
224                 } catch(Exception e) {
225 
226                         EprogIO.println(SEMANTIC_ERROR);
227 
228                 }
229         }

Beschreibung main()

213-214 Das komplexe Ein/Ausgabemodell wird ansich recht gut von eprog.jar versteckt. Da diese aber nicht so ganz fehlerfrei funktionioniert und sie in der Praxis nicht sehr professionell 'rüberkommt, wagen wir uns trotzdem darüber. Der BufferedReader ermöglicht, aus dem Eingabestream (System.in) eine Zeile einzulesen ("readLine").

216 Dank Exceptionhandling ist unser eigentliches Hauptprogramm gerade mal eine Zeile lang:

218 Wir geben schlichtweg HD=distance(Eingabe) aus, also "HD=", gefolgt von der ermittelten Hammingdistanz der Eingabecodewörter.

220-222 gibt's ein Zahlenformatproblem, hat der Benutzer also eine ungültige Codewortlänge eingegeben (ist der einzige Fall, der in unserem Programm relevant ist), geben wir "?" aus. Hier als Konstante angegeben, sie ist am Anfang der Datei mit static final definiert.

224-226 jede andere Exception liefert "FALSCHE EINGABE"


Wieder ein EPROG-Programm überstanden!
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