PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Converter für Binär, Oktal, Dezimal und Hexal



betaros
11.01.2012, 22:21
Moin,

ich bereite mich zur Zeit auf meine Prüfungen für die Uni vor und da habe ich einen kleinen Converter geschrieben, der die Zahlen ineinander umrechnet.

Mein Programm: BinOctDecHex (http://sourceforge.net/projects/binoctdechex/)

Nun bin ich in Java blutiger Anfänger und wollte euch fragen, falls ihr Zeit und Lust habt mir ein paar Tipps zu geben, wie ich meinen Quellcode noch optimieren könnte.

Vielen Dank schonmal im voraus.

betaros

amöbe
12.01.2012, 01:17
Zunächst voraus: Es ist recht schnell eine kleine List zusammen gekommen, nicht irritieren lassen ;) Wahrscheinlich ist kaum etwas hier für die Prüfung wichtig.

Du solltest deinen code, wenn du ihn eincheckst nicht direkt in die oberste Ebene des SVN-Repositorys packen, sondern in den Ordner "trunk".

Du könntest die Terminal-Methoden mittels eines statischen Imports einbinden, und statt System.out.println die Methode von Terminal verwenden. Oder die Terminal-Klasse ganz weglassen. Oder (aus OOP-Sicht wohl am Besten) sie nicht-statisch machen.

Du könntest die eigentlichen Konvertierungsmethoden in eine eigene Klasse packen. Es ziemlich unschön im GUI-Code die Main-Klasse von dem Konsolen-Code zu importieren. Oder am besten in mehre Klassen, nach Eingabe-Kodierung sortiert. Oder du konvertierst die Eingabe stets z.B. zu binär und dass dann immer zurück.

Du könntest für jede der Konvertierungsmethoden je eine eigene Klasse machen, diese Klassen ein Interface implementieren lassen, und dann je nach user-Eingabe eine anderes Objekt zur Konvertierung nehmen. (So wie hier: https://github.com/bxt/Ludus/blob/master/unilectures/src/bxt/unilectures/vorkurs/pi/CalculatePi.java)

Du könntest alle (oder zumindest die nicht-privaten) Methoden mit Javadoc versehen.

Du soltest die GUI-Funktionalität zum Anzeigen von "Bitte die Eingabe ueberpruefen" in eine eigene Methode auslagern. (In Prüfungen, gerade handschriftlich spart man sich so zudem Zeit)

Du könntest die GUI-Prüfer containsOnly* als aufrufe einer allgemeineren containsOnly(List<Char>, String input) schreiben. Du könntest sie auch als Reguläre Ausdrücke schreiben. Mindestens solltest du bei containsOnlyOctal den Aufruf von containsOnlyNumbers aus der Schleife ziehen.

Du könntest die containsOnly* in eine andere Klasse schreiben.

Du könntest deinen ganzen GUI-Code mehr MVC-mäßig aufbauen. Und dann den CLI-Code als andere View implementieren.

Du könntest überprüfen, welche Methoden privat sein können.

Du könntest statt pot() die Methode Math.pow() verwenden.

Du solltest die Variable binaryLength in der Methode binaryToDecimal() umbenennen zu etwas wo man den Unterschied zu binary.length() sieht, z.B. binaryRestLength. Du könntest binaryLength--; eine Zeile weiter hoch schreiben und dadurch in der anderen Zeile ein -1 sparen.

Du könntest die binarySmall-Variable mit substring() erstellen.

Du kannst decimalToBinary mit integer-Division implementieren, indem du nach der Division verdoppelst und vergleichst, statt Modulo zu nehmen.

Du könntest statt den } else if (binarySmall.equals("1001")) { eine Map verwenden. Ab Java 7 auch ein switch.

Du kannst dir das String.valueOf() bei Strings sparen.

Du könntest statt System.out.println die System.out.printf nehmen und die Strings in eine Property-Datei packen.

betaros
12.01.2012, 13:11
Vielen Dank für die vielen Tipps und Hinweise. :winke:

Ich werde mich mal ransetzen und das Programm optimieren. Das mit dem pot() habe ich selber geschrieben, weil ich möglichst viel selbst machen wollte, um zu verstehen wie es funktioniert :D

Zu der GUI: Ich habe das erste mal eine GUI gebastelt (mit dem WindowBuilder in Eclipse) und wollte damit sowieso noch etwas rumspielen :]

Falls ihr noch weitere Tipps habt: immer her damit^^

betaros