Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

huhu ich bin gerade damit fertig geworden ein kleines Programm zum berechnen des korrelationskoefizenten zu schreiben und wollte mal eure Meinung dazu wissen auch im punkto programmierstil ... ich hab das progi auf 2 verschiedene arten geschrieben einmal innerhalb der gui und einmal mit dem versuch gui und logik zu trennen

bin für jede positive und auch negative :rolleyes::D Kretik offen :)

also hier einmal das Projekt

progi2.zip

Gast runtimeterror
Geschrieben

Hi,

dann schreib ich mir einfach mal ohne jegliche Priorität frei von der Leber, das mir spontan (ohne das Programm bislang gestartet zu haben) einfällt.

Ich habe dein Projekt in mein Eclipse importiert und bekomme direkt folgendes "um die Ohren gehauen":


Description	Resource	Path	Location	Type

The static field JTable.AUTO_RESIZE_OFF should be accessed in a static way	Fenster3.java	/fachinformatiker.de/src/Korrelation	line 254	Java Problem

The import javax.swing.JFrame is never used	Einlesen.java	/fachinformatiker.de/src/Korrelation	line 6	Java Problem

The static field JFrame.EXIT_ON_CLOSE should be accessed in a static way	Fenster3.java	/fachinformatiker.de/src/Korrelation	line 84	Java Problem

The value of the local variable bf is not used	Einlesen.java	/fachinformatiker.de/src/Korrelation	line 16	Java Problem

The value of the local variable bf is not used	Einlesen.java	/fachinformatiker.de/src/Korrelation	line 39	Java Problem

The value of the local variable mathPowValue is not used	Calculation.java	/fachinformatiker.de/src/Korrelation	line 8	Java Problem

The value of the local variable mathPowValue is not used	Fenster2.java	/fachinformatiker.de/src/Korrelation	line 377	Java Problem

The method round(double) from the type Fenster2 can potentially be declared as static	Fenster2.java	/fachinformatiker.de/src/Korrelation	line 443	Java Problem

Unnecessary semicolon	Method.java	/fachinformatiker.de/src/Korrelation	line 41	Java Problem

The static field JFrame.EXIT_ON_CLOSE should be accessed in a static way	Fenster2.java	/fachinformatiker.de/src/Korrelation	line 85	Java Problem

The value of the local variable tableValue is not used	Fenster2.java	/fachinformatiker.de/src/Korrelation	line 247	Java Problem

The value of the local variable tableValue is not used	BtnCheck.java	/fachinformatiker.de/src/Korrelation	line 10	Java Problem

The import javax.swing.JTable is never used	Method.java	/fachinformatiker.de/src/Korrelation	line 4	Java Problem

The static field JTable.AUTO_RESIZE_OFF should be accessed in a static way	Fenster2.java	/fachinformatiker.de/src/Korrelation	line 347	Java Problem

Unnecessary semicolon	Fenster2.java	/fachinformatiker.de/src/Korrelation	line 368	Java Problem

The import javax.swing.table.DefaultTableModel is never used	Method.java	/fachinformatiker.de/src/Korrelation	line 5	Java Problem

The import javax.swing.JFrame is never used	Ausfueren.java	/fachinformatiker.de/src/Korrelation	line 3	Java Problem

Das meiste davon sind nur Schönheitfehler, weisen aber teilweise auf unbeabsichtigte Fehler hin. Man kann in Eclipse festlegen, was alles angemeckert werden soll. Ich empfehle immer alle Warnungen einzuschalten und nur die wieder abzuschalten, die man explizit für seinen Fall nicht benötigt. (Bei mir ist das meist "localize all strings") Auf jeden Fall alle Warnungen abarbeiten, sonst fängt man an die zu ignorieren und sie helfen nicht mehr. Was mir dann noch auffällt: Ich empfehle ein besonderes Augenmerk auf die Wahl von Bezeichnern zu legen. Mal abgesehen von diversen Rechschreibfehlern mischst du ohne für mich erkennbaren Grund Deutsch und Englisch (Ausfueren vs. Check, New) - ich hätte hier mit Execute gerechnet - oder Fenster statt Window. Ich empfehle immer englische Bezeichner zu wählen, es sei denn es handelt sich um fachliche Begriffe (z.B. Sozialversicherungsnummer). Dann finde ich viele Bezeichner zu kurz geraten: Btn statt Button, bf statt ?? - Eclipse (wie jede andere gute IDE) unterstützt dich durch Autocompletion beim Tippen, so dass es keinen Grund gibt Bezeichner abzukürzen. Gib in Eclipse mal "ISR" ein und drücke dahinter Strg+Space - dann macht das Programmieren doppelt viel Spaß :) Du hast an vielen Stellen den Bezeichner namens "wert" verwendet. Meistens handelt es sich um den berechneten Rückgabewert einer Methode. In diesen Fällen bietet sich z.B. "result" an, was zumindest ein bisschen was über den Verwendungszweck aussagt - was Treffenderes geht aber in vielen Fällen halt auch nicht. Package-Bezeichner werden in java "traditionell" in Kleinbuchstaben gehalten (also "korrelation" statt "Korrelation") (<- hier hätte ich beinahe "Korellation" geschrieben :). Dann ist mir noch die hohe Zahl an static-Methoden aufgefallen. Ohne es im Einzelfall überprüft zu haben, solltest du dafür sorgen, dass static-Methoden die Ausnahme bleiben. Java ist eine objektorientierte Programmiersprache - static ist eher das Gegenteil. Dann noch das leidige Thema Dokumentation. Ich empfehle zumindest jeder Klasse ein Javadoc zu verpassen, damit man weiß worum es geht. Gut ist es, wenn zudem jede public-Methode dokumentiert wird. Sprechende Bezeichner sorgen meist dafür, dass man sich die Inline-Dokumentation sparen kann. Dann habe ich an einigen stellen "catch (Exception e)" gefunden - das heißt für mich als Leser: "Hier können Fehler auftreten, von denen der Autor weder weiß, warum sie auftreten, von welcher Art sie sind noch wie er sinnvoll darauf reagieren soll.". Man sollte ausschließlich Exceptions auffangen, mit denen man rechnet. Zudem befindet sich bei dir in dem catch-Block nur die Ausgabe des Fehlers in der Konsole, nicht aber die Korrektur des Rückgabewertes. In der Fenster2-Klasse ruft du mehrfach hintereinander e.getActionCommand().equals(<other object>) auf. Ich würde e.getActionCommand() in eine eigene Variable speichern, damit die nicht mehrefach angefordert werden muss. Zudem erhöht das die Lesbarkeit und verkürzt die Zeilen. Du verwendest als Zeilentrenner "\n" - System.lineSeparator() liefert dir plattformunabhängig die richtige Zeichenkette hierfür. Zur Not bist du mit "\r\n" auf der sicheren Seite - Alle mir bekannten Betriebssysteme außer Windows sind da tolerant :) Konstrukte wie errorInfo = errorInfo + " Z" ...; kann man umschreiben zu errorInfo += " Z" ...; Uiii mein Lieblingskonstrukt:

if (error == false) {

	btnCalculate.setEnabled(true);

	JOptionPane.showMessageDialog(this, checked);

} else if (error == true) {

	JOptionPane.showMessageDialog(this, "Sie Haben in folgenden Zeilen (Z) und Spalten (S)  " + "einen falschen Wert eingegeben! " + "\n" + errorInfo);

}

Man verwendet boolsche Werte, damit man sie nicht mehr mit true oder false vergleichen muss. Folgender Code ist äquivalent:

if (error) {

	JOptionPane.showMessageDialog(this, "Sie Haben in folgenden Zeilen (Z) und Spalten (S)  " + "einen falschen Wert eingegeben! " + "\n" + errorInfo);

} else {

	btnCalculate.setEnabled(true);

	JOptionPane.showMessageDialog(this, checked);

}

Was mir spontan positiv auffällt (das fällt mir nicht leicht, da ich mittlerweile vieles als selbstverständlich empfinde - aber ich gebe mir Mühe :)

Dein Code ist in viele kleine übersichtliche Einheiten/Methoden gegliedert.

Die Code-Formatierung ist schon ganz gut, ich habe kaum fehlende Einrückungen gesehen und du verwendest Leerzeilen als funktionale Trenner. (Drück mal Strg+Shift+F - dann formatiert der dir automatisch den Quelltext anhand vordefinierter (aber anpassbarer) Regeln)

Du benutzt packages (das bin ich bei "schaut-mal-meinen-code-an-Posts" nicht gewohnt)

Du speicherst Werte, die du an mehreren Stellen benötigst in separaten Variablen, anstatt sie mehrfach anzufragen (leider noch nicht überall, wo es sinnvoll wäre)

Du benutzt Annotationen

Ich hör hier dann einfach mal auf und hoffe, dass du ein paar brauchbare Vorschläge finden konntest. Ich finde es gut, wenn sich jemand um Code-Qualität kümmert - das machen leider viel zu wenige :(

Viel Erfolg/Spaß!

Geschrieben

huhu erstmal ein danke das du dir die Zeit genommen hast, dir das program einmal anzuschauen und diesen txt zu schreiben :)

Ich habe dein Projekt in mein Eclipse importiert und bekomme direkt folgendes "um die Ohren gehauen":


Description	Resource	Path	Location	Type

The static field JTable.AUTO_RESIZE_OFF should be accessed in a static way	Fenster3.java	/fachinformatiker.de/src/Korrelation	line 254	Java Problem

The import javax.swing.JFrame is never used	Einlesen.java	/fachinformatiker.de/src/Korrelation	line 6	Java Problem

The static field JFrame.EXIT_ON_CLOSE should be accessed in a static way	Fenster3.java	/fachinformatiker.de/src/Korrelation	line 84	Java Problem

The value of the local variable bf is not used	Einlesen.java	/fachinformatiker.de/src/Korrelation	line 16	Java Problem

The value of the local variable bf is not used	Einlesen.java	/fachinformatiker.de/src/Korrelation	line 39	Java Problem

The value of the local variable mathPowValue is not used	Calculation.java	/fachinformatiker.de/src/Korrelation	line 8	Java Problem

The value of the local variable mathPowValue is not used	Fenster2.java	/fachinformatiker.de/src/Korrelation	line 377	Java Problem

The method round(double) from the type Fenster2 can potentially be declared as static	Fenster2.java	/fachinformatiker.de/src/Korrelation	line 443	Java Problem

Unnecessary semicolon	Method.java	/fachinformatiker.de/src/Korrelation	line 41	Java Problem

The static field JFrame.EXIT_ON_CLOSE should be accessed in a static way	Fenster2.java	/fachinformatiker.de/src/Korrelation	line 85	Java Problem

The value of the local variable tableValue is not used	Fenster2.java	/fachinformatiker.de/src/Korrelation	line 247	Java Problem

The value of the local variable tableValue is not used	BtnCheck.java	/fachinformatiker.de/src/Korrelation	line 10	Java Problem

The import javax.swing.JTable is never used	Method.java	/fachinformatiker.de/src/Korrelation	line 4	Java Problem

The static field JTable.AUTO_RESIZE_OFF should be accessed in a static way	Fenster2.java	/fachinformatiker.de/src/Korrelation	line 347	Java Problem

Unnecessary semicolon	Fenster2.java	/fachinformatiker.de/src/Korrelation	line 368	Java Problem

The import javax.swing.table.DefaultTableModel is never used	Method.java	/fachinformatiker.de/src/Korrelation	line 5	Java Problem

The import javax.swing.JFrame is never used	Ausfueren.java	/fachinformatiker.de/src/Korrelation	line 3	Java Problem

Man kann in Eclipse festlegen, was alles angemeckert werden soll.

wo kann man das denn einstellen ich war ehrlichgesagt ein wenig verwundert das da sofort Fehler bei dir angezeigt worden :)

Was mir dann noch auffällt: Ich empfehle ein besonderes Augenmerk auf die Wahl von Bezeichnern zu legen. Mal abgesehen von diversen Rechschreibfehlern mischst du ohne für mich erkennbaren Grund Deutsch und Englisch (Ausfueren vs. Check, New) - ich hätte hier mit Execute gerechnet - oder Fenster statt Window. Ich empfehle immer englische Bezeichner zu wählen, es sei denn es handelt sich um fachliche Begriffe (z.B. Sozialversicherungsnummer).

ja stimmt ich habs leider nicht so gut mit der englischen sprache und hab eig auch meist deutsch benutzt und wollte jetzt halt englisch schreiben weils halt so festgesetzt ist ....

Dann ist mir noch die hohe Zahl an static-Methoden aufgefallen. Ohne es im Einzelfall überprüft zu haben, solltest du dafür sorgen, dass static-Methoden die Ausnahme bleiben. Java ist eine objektorientierte Programmiersprache - static ist eher das Gegenteil.

Dann noch das leidige Thema Dokumentation. Ich empfehle zumindest jeder Klasse ein Javadoc zu verpassen, damit man weiß worum es geht. Gut ist es, wenn zudem jede public-Methode dokumentiert wird. Sprechende Bezeichner sorgen meist dafür, dass man sich die Inline-Dokumentation sparen kann.

dazu muss ich sagen das ich erst dabei bin so richtig ins OO einzusteigen, vorher hab ich eher immer nur runterprogrammiert und muss mich da erst hineinarbeiten. zu der doku hast du da mal ein paar beispiele ich kann mir da gerade nichts drunter vorstellen ...

In der Fenster2-Klasse ruft du mehrfach hintereinander e.getActionCommand().equals(<other object>) auf. Ich würde e.getActionCommand() in eine eigene Variable speichern, damit die nicht mehrefach angefordert werden muss. Zudem erhöht das die Lesbarkeit und verkürzt die Zeilen.

Konstrukte wie errorInfo = errorInfo + " Z" ...; kann man umschreiben zu errorInfo += " Z" ...;

ich wusste garnicht das man befehle in eigene variablen speichern kann wie funktioniert das denn genau ?

zu dem umschreiben die möglichkeit kenne ich bereits allerdings irritiert diese mich persönlich wesswegen ich diese schreibweise ungern verwende.

Was mir spontan positiv auffällt (das fällt mir nicht leicht, da ich mittlerweile vieles als selbstverständlich empfinde - aber ich gebe mir Mühe :)

Dein Code ist in viele kleine übersichtliche Einheiten/Methoden gegliedert.

Die Code-Formatierung ist schon ganz gut, ich habe kaum fehlende Einrückungen gesehen und du verwendest Leerzeilen als funktionale Trenner. (Drück mal Strg+Shift+F - dann formatiert der dir automatisch den Quelltext anhand vordefinierter (aber anpassbarer) Regeln)

Du benutzt packages (das bin ich bei "schaut-mal-meinen-code-an-Posts" nicht gewohnt)

Du speicherst Werte, die du an mehreren Stellen benötigst in separaten Variablen, anstatt sie mehrfach anzufragen (leider noch nicht überall, wo es sinnvoll wäre)

Du benutzt Annotationen

na das hör ich doch mal gerne vorallem den teil mit den übersichtlichen und vielen kleinen Methoden wo man mir schon öfters sagte das man soetwas nicht macht (z.b. buttons als eigene methode etc ...) Die einrückfunktion hab ich irgendwann mal von gehört hab sie aber bis jetzt NIE gebraucht da ich beim programmieren schon versuche eine gewisse ordnung und übersichtlichkeit zu erreichen ..

so ein großes danke nochmal an dich und deine mühe zumal wenn ich mir mal die uhrzeit deines postes ansehe :)

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...