Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Größte Zahl aus einem Array ermitteln(als statische Methode)
Hey Leute,
ich habe echt keine Ahnung wie ich die Aufgabenstellung lösen soll, weil ich dieses Thema objektorientierte Programmierung nicht so ganz verstehe. Wie muss man bei dieser Aufgabenstellung vorgehen? Also muss ich quasi zwei Quellcodes machen? In einem die Methode implementieren und in dem anderen die Methode testen lassen?
Richtig, es müssten zwei Quellcodes geschrieben werden. Die eine Datei hieße dann ArrayGroessteZahl.java, die andere ArrayGroessteZahlTest.java. Beide enthielten die Klasse mit entsprechendem Namen.
Also hab das ausprobiert und klappt leider nicht.
Ich habe mir halt gedacht, dass ich in der main methode ein array mitgeben muss und damit die methode mit dem array arbeiten, man ein neues array braucht
Ich habe halt leider einen Denkfehler..
Und ich hoffe das ist nicht falsch
Die Zuweisung in Zeile 8 muss andersrum sein oder ?
Okay hab das geändert.
Nur wie muss ich das in main() machen ? Wie kann ich diese methode aufrufen und das array mitgeben ?
Hab leider kein Plan wie man macht
Ebenso vermieden werden sollten Antworten die fertigen Code liefern, der zusätzlich nicht benutzt werden darf, und dem TO keinerlei weitere Hilfestellung bietet...
Das ist übrigens ein sehr schönes Beispiel dafür, dass sich die Denkweise beim Test Driven Development völlig ändert. Für Interessierte: @mrBrown hat hierzu bereits zwei schöne Beispiele gepostet (zu FizzBuzz und Pfadsuche), daher erspare ich mir den Code.
Ohne TDD setze ich mich hin und schreibe Code, der das Problem löst. Ich konzentriere mich also auf das Problem. Ganz anders, wenn ich TDD anwende. Dann schaltet mein Hirn in den Test-Mode, d. h. mich interessiert der Code der Methode erstmal gar nicht und schon der Anblick von
Java:
public static int ermittleGroessteZahl(int[] array)
löst einen Reflex aus. Ich würde das mal als den null-Reflex bezeichnen. null ist für den Programmierer die heiße Herdplatte, die man mit den Fingern berührt, der leichter Stromschlag, der einen zusammenzucken lässt. Was also passiert, wenn man der Methdoe null übergibt? Oder besser: was soll passieren? Eine NullPointerException wäre angebracht.
Das kann man testen und weiter gehts: was soll passieren, wenn array leer ist? Ooops. Auch hier wäre eine Exception angebracht, denn in einem leeren Array gibt es nun einmal keine größte Zahl. Natürlich ist es keine NPE, eher eine IllegalArgumentException oder NoSuchElementException.
Test geschrieben, weiter gehts: Das array kann null oder leer sein, gut, es kann aber auch genau ein Element enthalten, das dann natürlich auch das größte Element sein muss... Test schreiben und weiter mit zwei Elementen.
Bei zwei Elementen kommt man mit einem if, dem ternären Operator oder auch Math.max aus. Auch den Fall kann man testen, ab drei Elementen muss man sich aber was einfallen lassen: je konkreter der Testcode wird, desto allgemeiner muss der Produktivcode werden.
Beim TDD liegt der Fokus also auf der Spezifikation, das Problem wird eher nebenbei gelöst. Die Aussage ist allerdings mit Vorsicht zu genießen, denn das Problem besteht tatsächlich in der Erfüllung der Spezifikation und nicht im Code, der nur einen Teil, den happy Path, implementiert.
Oh, da nichts davon in der Aufgabenstellung erwähnt wird, sind dem der die Methode implementieren soll an der Stelle ziemlich viele Freiheiten gesetzt.
Oh, da nichts davon in der Aufgabenstellung erwähnt wird, sind dem der die Methode implementieren soll an der Stelle ziemlich viele Freiheiten gesetzt.
Es ging mir nicht um seine Aufgabe, sondern darum, dass sich die Denke mit TDD schlagartig ändert, was dazu führt, dass man sich auf Ebene der Spezifikation dem Problem nähert.
Davon abgesehen, bekommt er später auch keine Aufgabe vorgesetzt, sondern muss sich selbst darum kümmern. Da stellt sich dann schon die Frage, was man z. B. bei einem leeren Array als Maximum zurückgeben soll.
Nicht zwingend, da bereits die Art der Aufgabenstellung (statische Methoden, ohne java.util...., Testen ohne JUnit) bereits impliziert das Werkzeuge wie z.B. Streams, TDD gerade nicht verwendet werden sollen / dürfen / müssen. Da bleibt die (ältere) "zu-Fuss-Lösung" mit der Annahme das das Zielarray mindestens einen gültigen Wert enthält: https://beginnersbook.com/2014/07/java-finding-minimum-and-maximum-values-in-an-array/
TDD ist vor allem auch die Denkweise, das kann man auch mit einer Main-Methode und ein paar Ausgaben erreichen – also genau das, was in der Aufgabe gefordert ist
Wenn man nicht erst die Methode fertig schreibt, bevor man sie das erste Mal ausführt, verhindert man auch die Fehler, die der TO gemacht hat
Was, und ob überhaut, etwas diesbezüglich gewünscht ist weiß ja nur der TE, aber anhand der Aufgabenstellung würde ich sagen, die Aufgabe ist schon seit #19 gelöst.