Wo ist der Fehler?

Leyonad

Mitglied
Hallo zusammen,
ich finde den Fehler im folgenden Programm nicht. Das Programm soll die größte Anzahl der zwischen 2 gleichen Buchstaben liegenden Buchstaben finden.

Beispiel mit 'a' und 'z': "Das Haus ist schön im Wald ztestz"
"Das Haus ist schön im Wald ztestz"
"Das Haus ist schön im Wald ztestz"

Das Programm sollte dann ausgeben:
"a Ergebnis: 17"
"z Ergebnis: 4"

Aber es gibt aus:
"a Ergebnis: 17"
"z Ergebnis: 26"

Das Programm zählt 'z' von Anfang an schon +1.
Ich weiß nicht woran das liegt.
Ich bin für jede Hilfe dankbar.

Gruß
Unten der Code

Java:
public static void main(String[] args) {
      
String text = "Das Haus ist schön im Wald ztestz";
String textklein = text.toLowerCase();
System.out.println(text);
char[] buchstaben = textklein.toCharArray();

int zahl_a = 0;
int zahl_z = 0;
int hoechste_a = 0;
int hoechste_z = 0;
boolean a = false;
boolean z = false;
for(int i = 0; i<textklein.length(); i++){
      
switch(buchstaben[i]){
    case 'a':while(hoechste_a<zahl_a){
                         hoechste_a = zahl_a;
                     }
                     zahl_a = 0;
                     a = true;
                     break;
  case 'z':while(hoechste_z<zahl_z){
                        hoechste_z = zahl_z;
                     }
                     zahl_z = 0;
                     z = true;
                     break;
}
    if(a = true){
         zahl_a = zahl_a +1;
        }
    if(z = true){
         zahl_z = zahl_z +1;
        }
}
System.out.println("a Ergebnis: "+(hoechste_a-1));
System.out.println("z Ergebnis: "+(hoechste_z-1));

}
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Naja, ich wäre an Deiner Stelle etwas vorsichtig mit so absoluten Aussagen. Bisher ist das auf Stack Exchange eine Einzelmeinung und primär ging es auch um den Methodennamen. Gut möglich, dass da noch weitere Antworten kommen (insofern ich bei der Fragestellung alle Regeln bedacht habe).
Das auf Stack Exchange ist weniger interessant und darum ging es bei mir auch nicht. Daher noch einmal meine Frage: wo siehst Du Probleme mit diesen Prinzipien, die Du gebracht hast? Da sind Einzelmeinungen relativ uninteressant. Der Code, der da von Dir gebracht wurde, war nicht wirklich repräsentativ für die Thematik.

Das war also von mir lediglich ein Angebot, sich da einmal sachlich mit den Prinzipien auseinander zu setzen. Und an welcher ‚absoluten‘ Aussage von mir stört Dich etwas?
 

Meniskusschaden

Top Contributor
Bisher ist das auf Stack Exchange eine Einzelmeinung
Ehrlich gesagt habe ich noch nicht so richtig verstanden, warum wir jetzt hier darauf warten sollen, dass das Thema woanders diskutiert wird. Man kann seine Argumente doch gleich hier posten.:confused:
und primär ging es auch um den Methodennamen.
In der Möglichkeit, aussagekräftige Methodennamen zu vergeben, steckt ja gerade ein wesentlicher Vorteil der Aufsplittung.
 
K

kneitzel

Gast
Und nur ganz am Rande: Die Methodennamen im Code mit mehreren Funktionen wurden angemeckert (zu recht - die sagen ja nichts aus) aber die Kernaussage dieser einen Antwort ist "but in general it is better to split method into more, especially when code is nested like this."

Also meine freie Übersetzung:
"Aber generell ist es besser, Methoden in Mehrere zu unterteilen, vor allem wenn Code so verschachtelt ist wie hier.".

Die Verschachtelungstiefe war ja auch schon eines meiner Argumente. Aber das Argument wird doch nicht stärker, nur weil noch jemand dieses Argument bringt.

Ich sehe das eh etwas kritischer. Meinungen Anderer können hilfreich sein, aber die ersetzen doch nicht das eigene Verstehen. Java ist nicht Call By Value, nur weil das scheinbar Leute auf SO so sehen. Dies ist doch keine Quiz Show bei der man den Zuschauer Joker zieht (Und das Ergebnis ist nicht immer richtig!).

Daher ja: Lasst uns doch sachliche Argumente austauschen. Gerade zu den diversen Punkten kann man ja genug Texte finden, die man interpretieren kann.
 
K

kneitzel

Gast
Also ich habe schon geschrieben, dass ich Argumente gerne diskutiere - aber Deine Auslegung mit dem 2:1 kann ich nicht nachvollziehen. Nehmen wir z.B. die 3, Antwort:
"The question is whether a ("all in one") or b + c ("better abstraction") is better. Better abstraction is generally better, but here one would start with separating logic and printing."

Dann kommt zwar noch eine Aufarbeitung eines Vorteils von a, aber diese erste Aussage klingt in meinen Augen erst einmal nicht nach einer Zustimmung zu Deiner Variante. :)

Die Zweite Antwort findet die kürzere Variante a besser. Aber wirkliche Gründe kommen da auch nicht.... außer natürlich: ist kürzer.

Das einzig Neue, das dieser Thread ergeben hat für mich ist: Wir haben bisher schlicht nicht beachtet, dass eine Fuktion bei Clean Code genau eine Sache machen soll. Und bei uns werden zwei Sachen auf einmal gemacht: Halt der eigentliche Algorithmus und die Ausgabe sind zusammen. Aber in wie weit das für unsere Betrachtung relevant ist, kann ich erst einmal nicht sehen.

Klar - mit nur einer main wie bei Dir wird das nicht trennbar sein. Aber statt einer Ausgabe könnte einfach ein String zurück gegeben werden und schon wäre das Problem (etwas) umgangen.... Daher hat dieses neue Argument hier bei unserer Betrachtung keine Relevanz (Bei Stack Exchange geht es generell um ein Code Review - da ist es natürlich relevant!).

Den Vorteil, den die 3te Antwort noch für die erste Variante sieht, könnte man noch etwas bewerten. Aber bisher gab es hier keine wirkliche Diskussion von Pros- und Contras von Deiner Seite. Daher erspare ich mir hier auch erst einmal diesen Aufwand.
 
X

Xyz1

Gast
Naja, ich weiß schon, das wieder eine Sperre droht, aber du könntest dir deine scheinbaren Argumente komplett sparen. Hier geht es nicht darum, besonders langen und besonders inhaltslosen Text zu produzieren; sondern schlicht darum, das man solche Algorithmen, die eine starke logische Einheit bilden, nicht aufsplittet. Ich sah das so, @mihe7 sah das so und zwei weitere Personen auf Stack Exchange ebenso. Willst du uns allen Unkenntnis unterstellen? ... Wenn Argumente nicht mehr greifen, ufert eine Diskussion oft aus; wir sind gerade dabei.
 
K

kneitzel

Gast
Also bitte präzisiere doch "scheinbare Argumente". Was soll das überhaupt sein? Argumente, die nicht zutreffen? Oder die logisch falsch sind? Sich auf falsche Tatsachen beziehen?...

Ich unterstelle niemandem Unwissenheit. Ich unterstelle lediglich Dir massive Probleme beim Textverständnis sowie beim formulieren von Texten. Das zeigst Du hier im Forum regelmäßig. Das ist ok - ich will niemandem vorgeben, was er schreiben darf und was nicht.

Aber wenn jemand etwas schreibt, das in meinen Augen nicht korrekt ist, dann erlaube ich mir, dazu auch eine Richtigstellung zu schreiben. Da ich durchaus in der Lage bin, Texte zu verfassen, begründe ich meine Aussage. Dadurch kommen dann Texte zustande, die womöglich für Dich nicht verständlich sind....

Ja: Im Sinne einer Kommunikation müsste ich mir jetzt Gedanken machen, was ich wie formulieren könnte, damit Du es verstehst. Aber da ich nicht DICH überzeugen will (Das ist nicht möglich - wurde schon mehrfach gezeigt. Auch im Forum hast Du mehrfach gezeigt, dass Argumente und Verständnis egal sind ... SO und jetzt SE sind Autoritäten ....) ist es mir schlicht egal.
Mir geht es hier nur darum, kurz meine Sicht darzustellen. Da kann sich dann jeder selbst sein Bild machen. So muss jetzt z.B. niemand dem Link zu SE folgen - Ich denke die Kernaussage habe ich zitiert.... Gegenargumente gab es ja jetzt auch nicht von Dir.

Also: Du hast Deine Meinung geschrieben. Ich habe meine Meinung geschrieben. Wo bitte siehst Du ein Problem?

Du meinst, ich habe die Aussage der dritten Antwort falsch verstanden? Dann erläutere sie doch einmal! Da könnte man sachlich drüber reden. Was verstehst Du wie? Drück Dich doch einmal aus! Versuche es einfach! Auch wenn Du da Defizite haben solltest: Übe es! Hier sind viele, die bereitwillig helfen würden - so Du dies zulassen würdest!

Oder willst Du den Thread einmal von Anfang an aufrollen und wir reden z.B. einmal über "Teile und Herrsche"? Den Link, der dies beschreibt, hast Du ja selbst schon gefunden und gepostet. Wollen wir den Text evtl. einmal gemeinsam analysieren?

Wir können gerne sachlich über alles reden. Nur bitte bleibe bei der Sache!
 
K

kneitzel

Gast
brauchbarer Programmierer

Also diese Diskussion wird so zu nichts führen denke ich, aber zu dem Thema brauchbare Programmierer würde ich die Frage stellen: gibt es die? Programmierer gibt es, aber in der Software Entwicklung braucht man Software Entwickler...

Bei https://www.java-forum.org/thema/weihnachtskalender-fuer-entwickler.186741/ einmal mal dem Link folgen und Türchen 16 ansehen. Ich denke, er trifft es da relativ gut. Aber das will ich nicht weiter vertiefen, denn diesbezüglich bin ich in der Vergangenheit schon mit Jemandem aneinander geraten, der das überhaupt nicht so gesehen hat und sich da wohl auch massiv gekränkt gefühlt hat (Was aber irrational ist...)
 
K

kneitzel

Gast
Sorry, muss mich etwas missverständlich ausgedrückt haben. Deine Aussage war mir schon klar. Diese Wortwahl von "brauchbarer Programmierer" hat da nur was in mir getriggert - und über das verlinkte Türchen bin ich hier vor Kurzem erst gestolpert....

Sieh es daher bitte nicht als Kritik an Deine Aussage / Frage sondern nur als eine Art "Schmankerl" von mir (wenn auch nicht aus "meiner Jugend"). Werde wohl einfach alt und redselig :)
 

Meniskusschaden

Top Contributor
Aber das will ich nicht weiter vertiefen, denn diesbezüglich bin ich in der Vergangenheit schon mit Jemandem aneinander geraten, der das überhaupt nicht so gesehen hat und sich da wohl auch massiv gekränkt gefühlt hat (Was aber irrational ist...)
Der Autor hat da sicher mit einigem Recht. Ich kann aber schon verstehen, wenn sich da jemand auf den Schlips getreten fühlt, denn er blendet aus, dass es auch sehr viele Bereiche gibt, in denen man Programmierer sehr gut gebrauchen kann, aber aus Softwaredesign praktisch keinen Nutzen zieht. Etwa weil das System kaum generisch sein muß oder nicht die Größe, nicht die Lebensdauer oder nicht die Verbreitung erreicht, bei der sich das überhaupt rentiert. Dazu kann beispielsweise die unternehmensinterne Anpassungsprogrammierung der ERP-Software gehören. Da laufen unheimlich viele Leute rum, die noch nie etwas von Softwareentwicklung gehört haben, aber trotzdem die praktischen Probleme des Unternehmens sehr kostengünstig lösen. Softwaretechnisch ist das in der Regel zwar sehr einfach, aber Programmierkenntnisse braucht man schon dafür. Der Code von Softwaredesignern hat zudem auch mal den Nachteil, dass er nur von Softwaredesignern verstanden wird, während der Code von Programmierern in der Regel schon von anderen Programmieren verstanden werden kann.;) Das ist viel billiger.

Das Ganze erinnert mich an einen alten Bericht, den der Miniatur Wunderland Gründer Gerrit Braun mal bei heise developer veröffentlicht hat. In den Kommentaren dazu haben Einige wegen der mangelhaften Softwarearchitektur und anderer Risiken schon den drohenden Untergang prognostiziert. Ich glaube, wenn Gerrit Braun Softwarearchitekt gewesen wäre, wäre das Miniatur Wunderland nie entstanden. Zum Glück ist er nur Programmierer.;)
 
X

Xyz1

Gast
@Tobias-nrw Wie würdest Du folgende Frage beantworten?
Welche Eigenschaft ist wichtiger, um ein brauchbarer Programmierer zu sein?
A) immer Recht zu behalten
B) dazu lernen zu können
Das ist ganz einfach, ich mag eben die Wahrheit. :) Wenn jemand Quatsch verzapfen möchte und gleichzeitig auf seiner Meinung beharrt, na dann sage ich eben das es Quatsch ist. :)
Das ist ein bisschen so wie in der Politik, manche reden viel, aber sagen wenig...
Aber zurück zum Thema, brauchbarer Programmierer ist wer brauchbare Programme produziert wobei diese alle Konventionen erfüllen.
 
K

kneitzel

Gast
Das ist ganz einfach, ich mag eben die Wahrheit. :) Wenn jemand Quatsch verzapfen möchte und gleichzeitig auf seiner Meinung beharrt, na dann sage ich eben das es Quatsch ist. :)
Das ist ein bisschen so wie in der Politik, manche reden viel, aber sagen wenig...
Aber zurück zum Thema, brauchbarer Programmierer ist wer brauchbare Programme produziert wobei diese alle Konventionen erfüllen.

Das ist ja auch in Ordnung. Du darfst die Meinung haben, die du willst, Du darfst von anderen Meinungen halten, was Du willst. Aber einfach nur eine andere Meinung zu haben ohne Argumente macht jemandem zu einer Witzfigur. Das Schlimme ist: Du denkst Dir ja tatsächlich etwas und da ist es dann extrem schade, wenn Du nicht bereit bist oder nicht in der Lage bist, dies zu begründen.

Und Aktionen wie in #15 disqualifizieren jemanden, der sowas bringt. Du bringst einen vernünftigen Link und bringst dann:
Nein, fällt auch nicht unter divide & conquer.

Das komplette Problem ist eigenständig, keine Rekursion, keine Effizienzsteigerung.

Das Grundprinzip ist laut Deinem Link:
Bei einem Teile-und-herrsche-Ansatz wird das eigentliche – in seiner Gesamtheit – als zu schwierig erscheinende Problem so lange rekursiv in kleinere und einfachere Teilprobleme zerlegt, bis diese gelöst („beherrschbar“) sind. Anschließend wird aus diesen Teillösungen eine Lösung für das Gesamtproblem (re-)konstruiert.

Rekursion bezieht sich hier nicht auf eine Rekursive Methode sondern auf den Prozess: Du hast ein Problem und zerteilst es. Dann schaust Du die Teile an, ob diese "gelöst" sind. Wenn nicht, zerteilst Du dieses Teilproblem erneut (==> Rekursive Anwendung)

Und wenn Jemand 15P in einem Informatik Leistungskurs hatte und Informatik studiert (hat), dem sollte klar sein, dass ein rekursiver Algorithmus jederzeit in einen iterativen Algorithmus umgewandelt werden kann. Daher wirkt ein solches Verständnis des Textes besonders amüsant.

Aber ja: selbstverständlich darfst Du auch weiterhin Deine Meinung haben. Genau so, wie Du dann DRY, YAGNI und Co umhergeworfen hast. Die Frage, wo Du diese Prinzipien verletzt siehst, hast Du nie auch nur versucht zu beantworten. Ich vermute, dass es hier ähnliche Probleme bei Verständnis gibt, aber ohne Details sind und bleiben es nur Vermutungen.

Es ist toll, dass Du eine andere Meinung hast. Ich finde es extrem toll. Das ist ein Weg, wie ich sehr viel lerne: Ich unterhalte mich mit anderen, frage nach deren Sicht auf diverse Dinge, rede über Vor- und Nachteile und auch darüber, wie etwas zu bewerten ist. Sprich: Das, was ich hier im Forum teilweise mache (z.B. https://www.java-forum.org/thema/lesbarkeit-von-streams.186743/) findet regelmäßig auch im Berufsleben statt. Es ist halt nicht schwarz/weiss. Es geht auch nicht um mich. Bei Lesbarkeit von Code geht es ja darum, dass alle, die den Code lesen können sollen, diesen möglichst gut lesen können.

So wie es bei Kommunikation auch darum geht, dass man sich so ausdrückt, dass der Andere einen versteht.

Und jemand, der daher kommt und einfach nur behauptet, dass man selbst Unrecht hat und derjenige hat Recht, das aber nicht im geringsten begründet, der hat eine gewisse Außenwirkung, wie Du selbst in der Vergangenheit bestimmt festgestellt hast. Es ist einfach, dann einfach zu sagen: "Die Welt ist voller Idioten", aber da gibt es dann auch ganz interessante Abhandlungen zu, die hier aber zu weit führen. Auf YT findet sich da einiges, ich mag z,B. Fr. Birkenbihl - da findet sich bestimmt wenn man nur sucht.

Aber ich wollte hier eigentlich nichts mehr groß schreiben, denn ich bin nicht in diesem Forum, um einen User zu analysieren oder zu diskutieren. Desweiteren werde ich inhaltlich Tobias nicht erreichen (alleine schon, weil er in die Defensive gedrängt wird. Es ist ja nicht zu erwarten, dass er sich hier öffnet und das Thema "Sein Verhalten" bzw. "Verhalten allgemein - bei dem aber sein Verhalten Auslöser ist" offen angehen wird ...), daher ist es sinnlos. Und ich bin eigentlich der Überzeugung, dass man mit Menschen reden sollte - und nicht über Menschen (Aber ich lasse mich von Tobias immer wieder triggern ...).
 
X

Xyz1

Gast
Das Problem ist doch dass die Argumentation von Nobody und Blender bereits (zum Teil) widerlegt wurde. Wozu sich noch weiter streiten, wenn das nicht eingesehen wird? Dabei hilft es auch nicht, wenn noch 10 Unbekannte hierher kommen, um andere zu provozieren.
 
K

kneitzel

Gast
Das Problem ist doch dass die Argumentation von Nobody und Blender bereits (zum Teil) widerlegt wurde. Wozu sich noch weiter streiten, wenn das nicht eingesehen wird? Dabei hilft es auch nicht, wenn noch 10 Unbekannte hierher kommen, um andere zu provozieren.
Wo wurde etwas widerlegt? Ich könnte auch fragen: wie kann etwas widerlegt worden sein, da doch keine Argumente gebracht wurden?

Aber ich gehe den Thread später gerne noch einmal durch - evtl. habe ich ja doch etwas übersehen. Aber mehr als der Versuch, Dich auf andere zu berufen, habe ich nicht in Erinnerung, Und das war einmal angeblich mihe7 (da habe ich einmal ein Post kommentiert, wobei es keine Aussage von ihm gab, was er genau gemeint hat. Aber ich denke, dass ich seine Aussage durchaus korrekt analysiert hatte) und dann etwas von wegen 2 zu 1 für Dich, wobei da ganz offensichtlich extreme Probleme mit dem Textverständnis vorliegen, wenn es wurde klar gesagt, dass die Trennung Sinn macht. Dann wird ein Vorteil von der ersten Variante betrachtet, aber da würde ich Bedenken bezüglich KISS / keine Optimierungen sehen, denn da geht es dann um Optimierungen um unnötige Schleifendurchläufe zu vermeiden. (Aber das war nicht das Thema, daher hatte ich das bei meiner ersten Reaktion nicht so gebracht)

Also wie immer: Tobias hat eine eingefahrene Meinung, die natürlich richtig sein muss. Argumente werden offensichtlich nicht verstanden. Es zählen nur, was bestimmte andere sagen (so der Lehrer was sagt, ist es wohl richtig, sonst wären da keine 15Punkte möglich gewesen ... jetzt im Studium auch .... SO und SE scheinen auch etwas zu zählen...) Argumente gibt es nicht und zählen nicht, generelles Verständnis gibt es nicht. Mensch, du willst ein Akademiker sein! Wissenschaftliche Herangehensweise! Da schaut man sich die Definitionen an und leitet davon ab! Das ist etwas, das ich erwarten würde!

Aber wie dem auch sei: Du hat’s jetzt diie Wahl: Bring Fakten und zeige uns, dass wir uns in Dir irren oder tritt einfach den Beweis an, das Du Blender Recht hat mit seinem Punkt a), dass ich Recht habe mit Deiner gestörten Wahrnehmung / deinem Problem selbst einfache Texte zu verstehen.

Aber ansonsten reicht es mir an dieser Stelle. So von Dir nichts handfestes kommt, werde ich nichts mehr ausführen,
 
X

Xyz1

Gast
Also das ist vielleicht mein Problem, dass ich mich zu schnell angegriffen fühle... Aber das gehört eigentlich nicht hierher. Persönliches sollte hier eigentlich nicht diskutiert werden imo. Also Entschuldigung wenn ich selber persönlich geworden bin. :( - Ich behaupte einfach mal, dass jeder, der auf Stack Exchange geantwortet hat, 3mal mehr weiß als wir alle zusammen.... Aber andererseits sind eure Argumente auch nicht "falsch", also ist es eher ein Trade off.

Edit
Wo wurde etwas widerlegt? Ich könnte auch fragen: wie kann etwas widerlegt worden sein, da doch keine Argumente gebracht wurden?
Sorry, ich hatte mich falsch ausgedrückt.

Edit 2
Es ging einfach darum, ob man Splitten sollten oder nicht, also, ob meine Version oder die von Blender "richtiger" wäre. Und nach Stack Exchange sind nunmal 2 meiner Meinung und 1 eurer Meinung. Nicht mehr nicht weniger habe ich mit 2:1 für mich auszudrücken versucht.
 
Zuletzt bearbeitet von einem Moderator:

Meniskusschaden

Top Contributor
Ich behaupte einfach mal, dass jeder, der auf Stack Exchange geantwortet hat, 3mal mehr weiß als wir alle zusammen
Mal ganz davon abgesehen, dass das eine völlig haltlose Behauptung ist, für die es überhaupt keine Anhaltspunkte gibt, ist es ohnehin nicht sinnvoll, auf die Reflexion über inhaltliche Aspekte zu verzichten, um stattdessen die vermeintliche oder tatsächliche Kompetenz der Beteiligten als Maßstab zu nehmen. Es spielt keine Rolle, wer etwas behauptet, sondern es geht darum, was jemand behauptet. Die Argumente müssen sich schon selbst tragen, sonst sind sie nichts wert. Wie kann man sich selbst nur auf diese Weise disqualifizieren? Es war nur ein weiterer Versuch von dir, durch Einschaltung einer "übergeordneten Instanz" vor der inhaltlichen Auseinandersetzung davon zu laufen.
Und nach Stack Exchange sind nunmal 2 meiner Meinung und 1 eurer Meinung.
Na ja, wohl eher 6:2 gegen dich. Außerdem solltest du zur Kenntnis nehmen, dass sich der größte Teil der Kritik an der gesplitteten Variante dort nicht gegen die prinzipielle Idee gerichtet hat, sondern gegen die Implementierungsmängel, die es in diesem Thread noch gar nicht gab, sondern erst bei deiner vermurksten Übertragung eingebaut wurden.
Das ist ein bisschen so wie in der Politik
Ja, wie in der Politik. Deine Niederlage hätte kaum vernichtender sein können und dennoch kommen skurrile Umdeutungsversuche.:D
 

temi

Top Contributor
Und nach Stack Exchange sind nunmal 2 meiner Meinung und 1 eurer Meinung.

Das Problem am www ist, dass du immer eine Mehrheit für deine Ansicht finden wirst, wenn du lange genug suchst.

Und bezüglich des Ausgangsproblems: Ich meine es gab hier im Forum mal einen Beitrag, bei dem die Richtlinie war, nicht mehr als eine Klammerebene zu haben. Was deutlich für die Aufteilung spricht.

Aber auch unter den Überfliegern unter den Programmierern wirst du immer auch jemanden finden, der anderer Meinung ist.

In einem Thema hatte wir auch mal kurz diskutiert ob anstatt von

methodToInvoke = methodToInvoke.replaceAll("\\s+","");

besser eine Methode extrahiert werden sollte, um die Lesbarkeit zu verbessern:

methodToInvoke = removeSpaces(methodToInvoke);

Und ja, ich (persönlich) finde es besser lesbar. Ergänzend könnte man dazu evtl. das Single Level of Abstraction Prinzip (Clean Code) nennen.

Wobei jeder für sich entscheiden muss, wie weit er das treiben möchte.
 
Zuletzt bearbeitet:

mihe7

Top Contributor
Ich sehe das nach wie vor recht entspannt :) Nehmen wir mal einen Sortieralgorithmus, dann ist jedem Selectionsort geläufig. Ich sehe da keine Notwendigkeit, auf mehrere Methoden aufzudröseln. Gefallen würde mir, das Vertauschen in eine separate Methode zu legen, denn das ist eine klare, abgegrenzte Aufgabe, die nicht problemspezifisch ist. Bei der inneren Schleife hätte ich dagegen schon Schwierigkeiten, einen geeigneten Methodennamen zu finden.

Test läuft immer gleich ab, egal auf wie viele Methoden man aufdröselt. Wenn man allerdings aufdröselt, braucht man mehr Tests. Legt man das Vertauschen in eine separate Methode, muss man die separat testen. Der Test für das Sortieren ändert sich dadurch jedoch nicht: unsortierte Liste rein -> sortierte Liste raus.
 
X

Xyz1

Gast
Man testet doch die Funktionalität der öffentlichen Methoden, nicht die der privaten, oder etwa nicht?
Eigentlich schon, aber es spricht ja nichts dagegen mit etwas Bauchweh die Swap-Methode auch public zu machen. Dennoch finde ich mihe7s Argumentation nicht unschlüssig, bei dem Beispiel nicht aufzudröseln oder wenn dann nur eine kleine Einheit aufzudröseln. Es ist einfach leichter zu lesen und zu verstehen und ggfs nicht schwerer zu testen.
 

mihe7

Top Contributor
Ja, ihr habt Recht, mein Kommentar war ein wenig verkürzt dargestellt und aus dem Zusammenhang gerissen.

Ein Argument für das Aufteilen war ja die Testbarkeit. Wenn ich also den Standard-Selectionsort-Algorithmus schreibe, kann ich mir überlegen, dass ich das Swap rausnehme. Das wäre eine eigenständige Funktionalität, weil ein Tauschen von Elementen nun mal nicht spezifisch für Selectionsort ist. Dadurch ändert sich nicht die Testbarkeit des Algorithmus - wohl aber des Swaps, für den ich dann einen Test schreiben kann/muss.

Bezogen auf den Sortieralgorithmus selbst ist die Testbarkeit folglich kein Kriterium. Hier kann es also nur um Lesbarkeit gehen. Diesbezüglich s. meinen vorherigen Kommentar.
 
K

kneitzel

Gast
Ich sehe das nach wie vor recht entspannt :) Nehmen wir mal einen Sortieralgorithmus, dann ist jedem Selectionsort geläufig. Ich sehe da keine Notwendigkeit, auf mehrere Methoden aufzudröseln.

Da kommst Du zu einem Punkt, der wichtig ist. Im ganz Kleinen machen viele Dinge wenig Sinn. Aber muss diese im Kleinen üben.

Ich bringe einmal ein krasses Beispiel, indem ich auf HelloWord zurückgreife.

Ist ganz trivial:
Java:
public class HelloWorld {
    public void main(String[] args) {
        system.out.println("Hello World!");
    }
}

Das ist natürlich nicht verkürzbar, nicht auftrennbar, gut lesbar, was weiß ich nicht alles ... Und an dem konkreten Beispiel
ist eine Auftrennung Blödsinn.

Aber dann bauen wir mal etwas daraus (JavaDoc erspare ich mir):
Code:
public class Application {
  private InputStream in;
  private PrintStream err;
  private PrintStream out;
 
  public final static String HELLO_WORLD_MESSAGE = "Hello World!";
 
  public Application (InputStream in, PrintStream out, PrintStream err) { ... }
 
  public String getHelloWorldMessage() { return HELLO_WORLD_MESSAGE; }
 
  public String printHelloWorldMessage() { out.println(getHelloWorldMessage()); }

  public void start() {
    printHelloWorldMessage();
  }
}

Java:
public class HelloWorld {
    public static void main (String[] args) {
        Application application = new Application(System.in, System.out, System.err);
        application.run();
    }
}

Was ist besser? In so kleinem Rahmen macht das alles kein Sinn. Aber es kann eine interessante Übung sein.

Eine Aussage a.la. "Testen war nicht gefordert" ist in der Schule oder an der Uni evtl. ok. Aber darüber hinaus ist das schlicht nicht tragbar. Ich sage nur Produkthaftung. Da gibt es dann keinen Punktabzug sondern eben mal eine Strafzahlung oder gar Insolvenz.... Und wie war das in Tür 16? Da sind dann Manager sauer, weil der teure Hochschulabsolvent sowas nicht kann. Ja, wie hätte er es auch wissen sollen? Diese Diskussion hier zeigt das doch recht deutlich! Tobias hat seine Eigenarten (wie wohl jeder in irgend eine Form), aber fachliches Wissen wird ihm wohl keiner Absprechen wollen! Und wenn wir hier anschauen, was für Kandidaten wir im Forum schon hatten: Einen ganzen Satz nieder zu schreiben ist da schon fast als eine Glanzleistung anzusehen!

Hier kann ich jetzt der "Application" beliebige PrintStreams geben (klar, geht auch generell mit System.setIn und co in Unit Tests. Aber ich wollte es halt noch möglichst aufblähen :) ) Aber man erkennt da schon eine extreme Unterteilung....

Wo exakt eine Unterteilung gewünscht wird und wo nicht, ist nicht exakt benannt. So heißt es bei Teile und Herrsche, dass man da rekursiv weiter teilt, bis etwas beherrschbar ist. Da hatten wir ja schon viele Diskussionen zu: Wie lang darf eine Methode sein? Wie viele Klammerebenen (Verschachtelungstiefe) u.s.w.
Die ganz festen Vorgaben halte ich für wenig sinnvoll. Also ein "Nur eine Klammerebene" ist in meinen Augen übertrieben.
Aber sowas ist eine super Übung! Mach es mal extremer! Befolge mal so extreme Regeln. Und schau Dir dann den Code an.
Meine Erfahrung ist, dass dann der normale Code, den man so schreibt, dann auch entsprechende Tendenzen annimmt.


Tobias möchte ich also durchaus zu Gute halten, dass er immer nur den ganz konkreten Fall gesehen hat. Und da kann man durchaus sagen: Kleiner Algorithmus, den zerteile ich nicht weiter.

Ich hätte ihn weiter zerteilt. Aber soll jeder so machen, wie er will. So man es nicht übertreibt, ist es auch ok. Und jeder kann da eine Meinung haben. Tobias findet alles in einer Methode besser lesbar. Ok. Es ist seine Meinung. Wir haben keinen Anhaltspunkt, dass er uns anlügt. Ebenso habt ihr (Hoffentlich) keinen Anlass, mir zu unterstellen, dass ich euch anlüge, wenn ich sage, dass mir das Unterteilte besser gefällt.

Aber wenn es um das Pro und Kontra geht, dann hätte ich mir da mehr versprochen. Es wurde extrem viel Aufgeworfen - angefangen von "Herrsche und Teile" hin zu KISS, DRY, YAGNI, .... Da hätte ich definitiv mehr erwartet und das ist, was ich Tobias vorwerfe (seine Meinung soll er haben, das ist ok ...)

Verstößt so eine zersplittete Lösung gegen KISS? Aus meiner Sicht nicht. Es ist alles "simple" und "stupid". DRY? Ich wiederhole mich nirgends. (Zumal bei DRY ja das Auslagern in eine Methode, die an allen Stellen dann genutzt wird, eine Lösung wäre ...) YAGNI? Da muss man dann wirklich überlegen. Bei dem extremen Hello World sehe ich da ein Problem - denn ich kann da ja auch mittels System.setOut testen. Somit wurde tatsächlich eine nicht benötigte Funktionalität eingebaut. Aber im eigentlichen Beispiel wurde nicht um eine neue Funktionalität erweitert. Es wurde nur das reine Problem unterteilt und dann gelöst.
 

Blender3D

Top Contributor
Ich sehe das nach wie vor recht entspannt :) Nehmen wir mal einen Sortieralgorithmus, dann ist jedem Selectionsort geläufig. Ich sehe da keine Notwendigkeit, auf mehrere Methoden aufzudröseln. Gefallen würde mir, das Vertauschen in eine separate Methode zu legen, denn das ist eine klare, abgegrenzte Aufgabe, die nicht problemspezifisch ist. Bei der inneren Schleife hätte ich dagegen schon Schwierigkeiten, einen geeigneten Methodennamen zu finden.
Stimmt alles.
Das ist aber nicht der Ursprung dieses Threads. Hier ging es um die Hilfestellung für einen Anfänger, wie man grundsätzlich ein Problem leichter lösen kann.
Mein Input zu den Thema war:
Das Problem in kleinere Teileproblem aufzuteilen, diese mit sprechenden Namen zu versehen, und letztendlich mit diesen Lösungen das Hauptproblem zu bewältigen. (Teile und Herrsche )
Natürlich:
Wenn es um Geschwindigkeit geht, kann das verwenden von Unterprogrammen kontraproduktiv sein.
Aber:
Teile und Herrsche ist bei der Vereinfachung von Problemen immer gültig.
Und sprechende Namen dienen immer der besseren Lesbarkeit.
 

mihe7

Top Contributor
Das ist aber nicht der Ursprung dieses Threads.
Seit wann bleiben wir hier beim Ursprung eines Threads?!? ;)

wie man grundsätzlich ein Problem leichter lösen kann.
[...]
Das Problem in kleinere Teileproblem aufzuteilen, diese mit sprechenden Namen zu versehen, und letztendlich mit diesen Lösungen das Hauptproblem zu bewältigen. (Teile und Herrsche )
Da sind wir vermutlich alle (D)einer Meinung.
 
X

Xyz1

Gast
dienen immer der besseren Lesbarkeit
Sprechende Namen der Lesbarkeit schon, aber bestimmte Algorithmen auseinanderziehen net. :p
Clean Code Regeln einzuhalten kann also unter bestimmten Umständen nicht zu einer besseren Lesbarkeit führen.
Es tut sich die Frage auf, wie solche "Ausnahme"Fälle zu definieren sind, aber da entfernen wir uns schon weit von der Eingangsfrage...
 

Blender3D

Top Contributor
Sprechende Namen der Lesbarkeit schon, aber bestimmte Algorithmen auseinanderziehen net.
Versuchen wir einmal, die Semantik dieses Textes zu verstehen.
Also:
Ein Algorithmus ist eine eindeutige Handlungsvorschrift zur Lösung eines Problems oder einer Klasse von Problemen.
Fast jedes Problem lässt sich mittels einen oder mehren bestimmten Algorithmen lösen.
Ein Algorithmus der sich auseinanderziehen lässt kann in kleinere Probleme zerlegt werden.
--> man kann den Teilproblemen sprechende Namen geben.
Also obige Aussage bedeutet. Sprechende Namen zu vergeben dient der besseren Lesbarkeit
---> Es geht uns um Lesbarkeit und nicht um Performance oder andere Belange.
--> Wir vergeben sprechende Namen um eine bessere Lesbarkeit zu erhalten.
Was soll dann der 2te Teil deines Statements bedeuten? aber bestimmte Algorithmen auseinanderziehen net.
?? :rolleyes:
 

mihe7

Top Contributor
Es tut sich die Frage auf, wie solche "Ausnahme"Fälle zu definieren sind
Ich denke mal, gar nicht. Das fängt schonmal damit an, dass die ganzen "Regeln" nicht allgemein gültig sind. Leute, die hardwarenah programmieren, werden anderen Code schreiben und lesen müssen, als CRUD-Anwendungsentwickler oder 4GL-Mausschubser.

Hinzu kommt, dass selbst innerhalb eines Bereichs das Ganze einem subjektiven Eindruck unterliegt, der von persönlichen Erfahrungen geprägt ist. Um beim Sortieren zu bleiben: wer schon öfter solche Algorithmen implementieren musste (z. B. weil es nix fertiges gab), der schaut auf den Algorithmus und weiß Bescheid, worum es geht. Wer sich aber bislang noch nie selbst um das Sortieren kümmern musste, der sitzt wahrscheinlich davor und denkt sich erst mal: WTF?!?

Hierzu gab es ja schon reichlich Diskussionen. Ein Punkt dabei war, dass sich die Frage stellt, ob man Code so schreiben muss, dass ihn selbst der Dümmste noch lesen kann. Das würde ich verneinen: der durchschnittlich begabte Entwickler muss in der Lage sein, den Code in angemessener Zeit zu verstehen. Womit wir das Problem erstmal auf "den durchschnittlich begabten Entwickler" und die "angemessene Zeit" verschoben haben. Allerdings kann man in jedem Bereich, jeder Firma, jedem Team, Projekt usw. einen Durchschnitt ermitteln und festlegen, welche Zeit noch angemessen ist.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Juelin jedit Fehler beim starten Java Basics - Anfänger-Themen 2
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
E Matrizenmultiplikation Fehler Java Basics - Anfänger-Themen 0
Z Fehler Zeiterfassungsprogramm Anzeige Java Basics - Anfänger-Themen 3
C SwingWorker mit Fehler Java Basics - Anfänger-Themen 2
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
G Compiler-Fehler Fehler in Zeile 1 beheben, wie? Java Basics - Anfänger-Themen 9
W Fehler in der Datei pom.xml Java Basics - Anfänger-Themen 19
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
ohneInformatik; Dynamische Zinsen. Wo liegt der Fehler? Java Basics - Anfänger-Themen 4
Fiedelbambu deriveFont Fehler wer kann Helfen? Java Basics - Anfänger-Themen 4
I Ical4j / Kalender einlesen von URL - Fehler: "Unparseable date" Java Basics - Anfänger-Themen 16
Lion.King Fehler in double und int Java Basics - Anfänger-Themen 7
H BlueJ: was genau ist hier der Fehler? Java Basics - Anfänger-Themen 14
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
D Datentypen LocalDate.parse() ergibt Fehler Java Basics - Anfänger-Themen 5
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
N Fehler "Cannot instantiate the type" Java Basics - Anfänger-Themen 3
L Ich weis nicht was der Fehler ist! Java Basics - Anfänger-Themen 14
L30nS JNI Fehler, JRE und JDK Java Basics - Anfänger-Themen 8
E Executable jar file fehler Java Basics - Anfänger-Themen 9
S Fehler beim Programm Java Basics - Anfänger-Themen 2
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
J Syntax-Fehler? Java Basics - Anfänger-Themen 2
Jose05 Fehler im Programm feststellen Java Basics - Anfänger-Themen 2
S Methoden 2 non-static Methoden, trotzdem Fehler "non static method can not be referenced from a static context" Java Basics - Anfänger-Themen 9
G Taschenrechner ergibt Fehler in if-Abfrage Java Basics - Anfänger-Themen 6
I Fehler bei for-Schleife Java Basics - Anfänger-Themen 6
lol5443 Tic Tac Toe Fehler Java Basics - Anfänger-Themen 5
K Fehler bei der Implementierung Java Basics - Anfänger-Themen 6
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
W Verschachtelte If-else --> finde meinen Fehler nicht Java Basics - Anfänger-Themen 30
J Fehler bei array aus anderer Klasse Java Basics - Anfänger-Themen 3
H Fehler bei integer Division Java Basics - Anfänger-Themen 28
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
N Was bedeutet dieser Fehler Java Basics - Anfänger-Themen 2
fuerteb Compiler-Fehler Methode wird nicht bzw. als Fehler erkannt Java Basics - Anfänger-Themen 4
Lion.King Fehler Java Basics - Anfänger-Themen 5
AlexG. Nullpointer exeption Fehler Java Basics - Anfänger-Themen 0
C Fehler im Code Java Basics - Anfänger-Themen 10
J Anfänger, Fehler; "Der Hund liegt begraben" Java Basics - Anfänger-Themen 3
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
V Wer findet den Fehler :) Java Basics - Anfänger-Themen 12
B ArrayIndexOutOfBoundsException, ich finde den Fehler nicht? Java Basics - Anfänger-Themen 10
A Compiler Fehler - not a statement Java Basics - Anfänger-Themen 2
Arita welche Fehler gibt es noch? wie kann ich es noch vervollständigen Java Basics - Anfänger-Themen 15
S Fehler bei Code mit SubStrings für mich nicht auffindbar. Java Basics - Anfänger-Themen 4
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
H Logik Fehler erkennen Java Basics - Anfänger-Themen 21
T Fehler in Caesar-Chiffre Java Basics - Anfänger-Themen 7
R Fehlermeldung aber WO liegt der Fehler? Java Basics - Anfänger-Themen 7
B Nicht reproduzierbarer Fehler bei Kompilierung - Shortcut "Bereinigung" Compiler ? Java Basics - Anfänger-Themen 4
Nerdinfekt BMI Rechner, fehler beim Zurückgeben des Strings? Java Basics - Anfänger-Themen 2
pumpgun99 Fehler Meldung "else without if" Java Basics - Anfänger-Themen 3
P Was bedeutet dieser Fehler? Java Basics - Anfänger-Themen 31
KogoroMori21 Java Datum Differenz (kleiner Fehler) Java Basics - Anfänger-Themen 10
N java.util.InputMismatchException Fehler Java Scanner Java Basics - Anfänger-Themen 5
H Fehler: NullPointerException und ich weiß net warum Java Basics - Anfänger-Themen 4
R Ich sehe meinen fehler nicht Java Basics - Anfänger-Themen 8
Johannes_ece Fehler: Application Terminated (TypeError): var$0.$moveToolTo is not a function Java Basics - Anfänger-Themen 4
GermanPie Fehler in Putty (kein Hauptmanifestattribut, in jar) Java Basics - Anfänger-Themen 4
M Scannen von *.txt - Dateien; wo sind der oder die Fehler? Java Basics - Anfänger-Themen 4
P Methoden aufrufen - Fehler Java Basics - Anfänger-Themen 20
JavaClap "Bruchrechner" liefert Fehler/keine Ausgabe bei Addition und Subtraktion Java Basics - Anfänger-Themen 0
B if Clause Fehler Java Basics - Anfänger-Themen 2
G Fibonacci Zahlenreihe Fehler Java Basics - Anfänger-Themen 4
A Fehler beim Ausführen einer class Datei Java Basics - Anfänger-Themen 6
B Fehler, aber ich weiß nicht warum Java Basics - Anfänger-Themen 3
C system cannot be resolved Fehler in Eclipse Java Basics - Anfänger-Themen 18
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
M Compiler-Fehler Fehler beim Ausführen des Codes Java Basics - Anfänger-Themen 25
M While-Schleifen-Fehler Java Basics - Anfänger-Themen 4
N Fehler bei JUnit Test Java Basics - Anfänger-Themen 5
C Projekte in 2 versch. Arbeitsbereichen: auf ein Projekt verweisen (ohne Fehler zu bekommen) Java Basics - Anfänger-Themen 8
R Java SQL Fehler! Java Basics - Anfänger-Themen 4
L non-static Fehler Java Basics - Anfänger-Themen 16
C Fehler beim Speichern (Build projekt) Java Basics - Anfänger-Themen 42
L Methoden Wie Löse ich ext Methoden Aufruf Fehler? Java Basics - Anfänger-Themen 3
F Methoden Bitte Helft mir meinen Fehler zu finden. Möchte in diesem Bankenprogramm durch die Konsoleneingabe auswählen welches Konto reduziert und welches erhö Java Basics - Anfänger-Themen 17
C Fehler bei der Compilierung Java Basics - Anfänger-Themen 1
T Mein Programm hat Fehler Java Basics - Anfänger-Themen 4
S Warum dieser Fehler? Java Basics - Anfänger-Themen 1
B Fehler bei Ausführung Java Basics - Anfänger-Themen 5
Kirby.exe Fehler beim Ausgeben Java Basics - Anfänger-Themen 2
X java.lang.NullPointerException fehler ? Java Basics - Anfänger-Themen 1
J Fehler in Programm: Index -1 out of bounds for length 0 Java Basics - Anfänger-Themen 5
M JOptionPane Fehler bei "Abbrechen" des Fensters Java Basics - Anfänger-Themen 10
N Fehler bei string Attribut! Java Basics - Anfänger-Themen 18
W Wo liegt der Fehler? Java Basics - Anfänger-Themen 8
G Palindromtest mit Angabe WO der Fehler ist Java Basics - Anfänger-Themen 2
J Wo ist der Fehler im Programmcode? Java Basics - Anfänger-Themen 7
J Fehler den ich nicht kapiere Java Basics - Anfänger-Themen 9
H "AWT-EventQueue-0" Fehler Java Basics - Anfänger-Themen 3
S Brauche hilfe in Java [Fehler in mein Code]? Java Basics - Anfänger-Themen 2
J Fehler beim generieren von 4 Zufallszahlen Zahl doppelt ist eigentlich ausgeschlossen Java Basics - Anfänger-Themen 9
C Fehler getMaxOf Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben