Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java?

asasasasas

Mitglied
Hallo und zwar
Wie soll man seinen Code ändern, dass z.B statt eine 7 ein * angezeigt wird ?
Dasselbe gilt für alle Zahlen, die einen 7er an der Einer- oder Zehnerstelle enthalten.
Mein Code sieht daweil so aus:
Java:
void setup() {
  magic7();
  System.exit (0);
}
void magic7() {
  for (int i=1; i<=100; i++) {
    print (i + " " );
    if ( i % 10 == 0) {
      println ();
    }
    if ( i % 7 == 0) {
      print ("* " );
    }
  }
}
 
K

kneitzel

Gast
Bei allen Algorithmen ist es wichtig, dass man erst einmal in Worten sagt, was der Algorithmus machen soll.

Also beschreibe einfach einmal, wie ich das Ergebnis, das Du gerne haben willst, auf ein Papier schreiben kann. Also eine ganz genau Anleitung.
- Zähle von 1 bis 100 und für jede Zahl machst du:
-- > Schreibe die Zahl gefolgt von einem Leerzeichen auf
wird wohl nicht das sein, was Du haben willst!
 

asasasasas

Mitglied
Bei allen Algorithmen ist es wichtig, dass man erst einmal in Worten sagt, was der Algorithmus machen soll.

Also beschreibe einfach einmal, wie ich das Ergebnis, das Du gerne haben willst, auf ein Papier schreiben kann. Also eine ganz genau Anleitung.
- Zähle von 1 bis 100 und für jede Zahl machst du:
-- > Schreibe die Zahl gefolgt von einem Leerzeichen auf
wird wohl nicht das sein, was Du haben willst!
Ja eh, aber ich weiß ja nicht wie ich das umsetzen soll mit dem Sternchen
 
K

kneitzel

Gast
Du sollst noch nichts umsetzen, Du sollst einfach jemandem, der keine Ahnung hat, was raus kommen soll, sagst, was er machen soll, damit hinterher das gewünschte auf dem Zettel steht. Du verstehst den Unterschied?

Wenn Du also so willst, dann habe ich den Computer vermenschlicht und habe die Sprachhürde weggenommen.

Man könnte es auch anders sagen:
Was machst Du denn genau, wenn Du die Zahlenreihe wie gewünscht aufschreiben sollst?
 

fhoffmann

Top Contributor
Du musst die Zahl (unter 100) in die Zehnerstelle und die Einerstelle zerlegen. Dies geht mit "/" und "%".
Danach kannst du gucken, ob die Zehnerstelle oder die Einerstelle eine 7 ist.

Aber @kneitzel hat natürlich recht, dass du die erst einmal überlegen musst, was du machen willst, bevor du es in einem Programm umsetzt.
 
K

kneitzel

Gast
Generell hast Du in Deinem Code ja auch schon erste Methoden. Daher dann einfach einmal ein (fiktives) Beispiel:

Wir werfen Post immer auf einen Haufen. Ordnung ist halt etwas für Leute, die das Chaos nicht beherrschen. Am Jahresanfang wird dann der Haufen abgearbeitet:

So lange Haufen nicht leer:
- Nimm oberstes Dokument vom Haufen
- Ist es Werbung? Ja: Wegwerfen
- Sonst: Ist es eine Rechnung?
-- > ist die Rechnung von den Steuern absetzbar: Ja: Auf Stapel Steuern legen
-- > Sonst: Ist die Rechnung zum Haus? Ja: Lochen und in Hausordner abheften
-- > Sonst: Haufen übrige Rechnungen
- Sonst: Auf Haufen Briefe legen

Das wäre eine Beschreibung, die man dann auch in Code umsetzen kann. Das wäre dann sowas wie:
Java:
while (!haufen.isEmpty()) {
    Document document = getFirstDocument(haufen);
    if (isAdvertisement(document)) {
        putToGarbage(document);
    } else if (isInvoice(document)) {
        if (isTaxRelevant(document)) {
            putToTaxDocuments(document);
        } else if (isHouseRelated(document)) {
            punchHoles(document);
            putIntoHouseFolder(document);
        } else {
            putToOtherInvoices(document);
        }
    } else {
        putToOtherLetters(document);
    }
}

==> Also eine 1:1 Übersetzung. Nur eben brauchen wir jetzt noch weitere Methoden: getFirstDocument, isAdvertisement, putToGarbage, ....

Das ist aber 1:1 genau so abbildbar. Du hast eine Schleife und dann hast Du eine Bedingung ... und je nach ergebnis gibst Du Entweder das eine oder das Andere aus. Kannst Du es in der Art des Beispiels schreiben?

Das wäre eine Top Down Methodik. Du fängst oben an und kommst dann immer weiter ins Detail. Das ist ein Weg. Man kann es auch deutlich ausführlicher Schreiben und damit dann auf Methoden verzichten. Das geht auch und wird am Anfang (leider) auch gemacht. Denn dieses Unterteilen macht es auch Anfängern deutlich leichter, da man keine komplizierten Methoden benötigt.
 

Michaaa

Neues Mitglied
Du musst einfach nur überprüfen ob die Zahl durch sieben teilbar ist mit einer If-Anweisung. Und wenn ja printest du einfach * aus. Und wenn nicht dann die Zahl.
also if( Zahl durch Sieben){
printe * aus
}else{
printe Zahl aus
}
 
Zuletzt bearbeitet:
K

kneitzel

Gast
Wir vermeiden es in der Regel, so fertige Lösungen hin zu klatschen. Der Lerneffekt geht so leider gegen Null und dem TE wird die Chance genommen, selbst zu verstehen, wie so eine Aufgabe eigenständig gelöst werden kann. Und da darauf immer mehr Stoff aufbauen wird, wird es ihm in der Zukunft nur noch schwerer fallen.

Und der erste Schritt ist nun einmal das Erkennen des generellen Vorgehens und das hätte man dann so formulieren können:

Für jede Zahl von 1 bis 100 schaue ich:
- Ist die Zahl durch 7 teilbar?
--> ja: Ich zeige ein * an.
--> nein: Ich zeige die Zahl an.
- Wenn 10 Zahlen angezeigt wurden, dann gehe ich in die nächste Zeile.

Oder wenn man das mit Methoden macht, wie ich es zuletzt gemeint habe:
Für jede Zahl von 1 bis 100
- Soll die Zahl gedruckt werden?
--> Ja: Drucke die Zahl.
--> Nein: Drucke ein *
- wurden 10 Zahlen angezeigt? ja: gehe in die nächste Zeile.

Hier hat man den Vorteil, dass nun die Prüfung eine eigenständige Methode ist. Da kommt dann am Ende lso etwas raus wie:

Java:
static public boolean printNumber(int number) {
    if (number % 7 == 0) return false;
    
    return true;
}

Und wenn man dann den Code erweitern muss ("Dasselbe gilt für alle Zahlen, die einen 7er an der Einer- oder Zehnerstelle enthalten."), dann wird es deutlich einfacher, weil der Code, der angepasst werden muss, deutlich einfacher ist:
Java:
static public boolean printNumber(int number) {
    if (number % 7 == 0) return false;

    // Hier kommen dann einfach weitere Prüfungen rein, ggf. per weiterer Methode, die aufgerufen wird.

    return true;
}

Das einfach einmal um einen Weg aufzuzeigen, wie man zu so einem Code kommen kann.

Wichtig ist aus meiner Sicht: Schrittweises Vorgehen! Lieber viele einfache Schritte, die kaum Komplexität haben als ein großen Schritt. Daher eine komplexe Sprache wie Java außen vor lassen, wenn man den Algorithmus noch nicht hat! Erarbeite den Algorithmus in einer Sprache, die Du beherrschst!
 

me-ton

Mitglied
So funktioniert es bei mir

Java:
    static void magic(int number) {
        for (int i = 1; i <= 100; i++) {
            if (i % number == 0) {
                System.out.print("** ");
            } else {
                System.out.print(String.format("%02d", i) + " ");
            }
            if (i % 10 == 0) {
                System.out.println();
            }
        }
    }
 
M

Mart

Gast
- wurden 10 Zahlen angezeigt? ja: gehe in die nächste Zeile.
dsa kannst du statt mit dem println mahcen in dem du in den String "\n" hinzufügst ( solllte hier reichen )

das ist aber betriebssystem abhängig
Java:
String newline = System.getProperty("line.separator");
String hallo = "Hallo"+newline;
das wäre betriebssystem unabhängig
 
M

Mart

Gast
So funktioniert es bei mir

Java:
    static void magic(int number) {
        for (int i = 1; i <= 100; i++) {
            if (i % number == 0) {
                System.out.print("** ");
            } else {
                System.out.print(String.format("%02d", i) + " ");
            }
            if (i % 10 == 0) {
                System.out.println();
            }
        }
    }
fertige lösungen sind nicht wirklich hilfreich, da der TE beim nächsten problem wieder nachfragen muss

zweitens würde ihc da schon ein "Hau Drauf" machen und nicht als "single responsibility" mehtode durchgehen lassen ... es ist ein haufen von 3 jobs deswegen hast du 2 ifs ;)
Java:
static String magicZwei(int number)
{

....
String sternchenErsetzung ="*"
int sternchenZahl = 7;
....
private String replaceSternchenNumber(int number){
    if( isSternchenReplacable(number) )
    {
        return sternchenErsetzung;
    }
    else
    {
        return number;
    }
}
private boolean isSternchenReplacable(int number){
return number % sternenZahl == 0;
}
übrigens das ist überraschenderweise genau der Teil der von kneitzel gesagt wurde... kleine Probleme... die IF abfragen kann man IMMER auslagern in boolean methoden und ist ( meines erachtens) guter stil da in der "haupt" ( die von haus aus Komplex genug ist ... das ist sie immer ) methode dann nur noch wörter stehen = gut lesbar
 

me-ton

Mitglied
wegen der geringen Komplexität halte ich ein weiteres Auslagern in Methode hierbei für unangebracht. Das was kneitzel geschrieben hat, ist also falsch.
 
M

Mart

Gast
Lesbarer ist, System.out.println(); zu verwenden...
ich kann dir sogar ein beispiel nennen warum das nicht gut ist.. da du redundant bist und das siehst du an deinem eigenen code da du 3 mal system.out schreibst

...so jetzt merkst du du möchtest aber in eine datei schreiben dann musst du jedes mal wo du system.out.println stehen hast Filewriter.write schreiben... da musst du 3 mal was löschen ... ist schlecht aber gut

beispiel nummer zwei du merkst jetzt du willst bob vor den string zuerst schreiben im gleichen string ( im nachhinein ) jetzt komst du aber nicht an den string ran... da du es sofort ausgegeben hast

das sind beispiele für single responsibility, redundanz vermeidung und ich könnte dir weitere beispiele nennen die unter dem begriff SOLID zusammengefasst sind... TDD also test driven developement machst du auch nicht wenn alles in einer mehtode ist da du die inezelnen teile nicht testbar sind

usw.. usw... usw. falls dich punkte interessieren kannst du es ja schreiben und posten wenn du fragen hast :)
 

me-ton

Mitglied
Java:
    static void magic(int number) {
        for (int i = 1; i <= 100; i++) {
            System.out.print((i % number == 0 ? "** " : String.format("%02d", i)) + (i % 10 == 0 ? "\n" : " "));
        }
    }

Ich finde das nicht wirklich übersichtlicher, da waren mir die vermeintlichen Redundanzen lieber
 
M

Mart

Gast
Java:
    static void magic(int number) {
        for (int i = 1; i <= 100; i++) {
            System.out.print((i % number == 0 ? "** " : String.format("%02d", i)) + (i % 10 == 0 ? "\n" : " "));
        }
    }

Ich finde das nicht wirklich übersichtlicher, da waren mir die vermeintlichen Redundanzen lieber
ich habe nicht gesagt dass du alles in eine sache schreiben solltest .. das ist lediglich mit absicht in die falsche richtung interpretiert
 
M

Mart

Gast
Ach, jetzt übertreib es nicht ;)

Du hast mir vorgeworfen, die print/println -Aufrufe seien redundant... daraufhin habe ich diese zusammengefasst.
aber wenn du schlechten code zusammen fasst auf noch schlechteren code dann wirst du keinen guten code raus bekommen

PS: du löst wieder keines der probleme die ich genannt habe gelöst
sondern du hastzusätzlich selber mitgekriegt dass die println methode anscheinend doch nicht reicht ;)
(i % 10 == 0 ? "\n" : " "))
 
K

kneitzel

Gast
wegen der geringen Komplexität halte ich ein weiteres Auslagern in Methode hierbei für unangebracht. Das was kneitzel geschrieben hat, ist also falsch.
Sorry, aber Dir ist bewusst, dass ich einfach nur eine Methodik aufgezeigt habe? Und diese ist falsch, weil das Beispiel hier nicht komplex genug ist? Sorry, aber Methodiken werden an einfachen Dingen geübt.
 

me-ton

Mitglied
Wer diese einfache Aufgabe nicht lösen kann, sollte gar nicht erst programmieren.

Neben den von kneitzel gezeigten Pattern (welche auch immer das sein mögen...) gibt es auch noch weitere Metriken, die in diesem Fall wichtiger sind.
 
M

Mart

Gast
Wer diese einfache Aufgabe nicht lösen kann, sollte gar nicht erst programmieren.
du hast es selber nicht zusammen gebracht also solltest du hier bei selbst reflektierend sein
Neben den von kneitzel gezeigten Pattern (welche auch immer das sein mögen...) gibt es auch noch weitere Metriken, die in diesem Fall wichtiger sind.
ich würde dir sehr empfehlen immer alles static zu machen und immer auf public zu setzen somit kannst du in java am besten einzeiler schreiben und der schmarn mit objekten und lesbar keit und so alles wofür modernes programmieren steht brauchst du dann auch nimmer
 

me-ton

Mitglied
Er hat seinen Code gezeigt und gefragt wo der Fehler ist. Also habe ich den Fehler genannt, nicht mehr nicht weniger. Nach einem Refactoring hat er nicht gefragt. Nach testbaren Code auch nicht. Selbst wenn es testbar sein muss, wäre auch eine einzelne Methode testbar. Der Rest von euch war Buzzwordbingo.
 
M

Mart

Gast
Er hat seinen Code gezeigt und gefragt wo der Fehler ist. Also habe ich den Fehler genannt, nicht mehr nicht weniger. Nach einem Refactoring hat er nicht gefragt. Nach testbaren Code auch nicht. Selbst wenn es testbar sein muss, wäre auch eine einzelne Methode testbar. Der Rest von euch war Buzzwordbingo.
???
 
K

kneitzel

Gast
Wer diese einfache Aufgabe nicht lösen kann, sollte gar nicht erst programmieren.
Oh, da ist ein Meister vom Himmel gefallen? Du bist ein neuer Account von unserem TobiasNRW?

Neben den von kneitzel gezeigten Pattern (welche auch immer das sein mögen...) gibt es auch noch weitere Metriken, die in diesem Fall wichtiger sind.
Ja, wenn man Probleme hat, Texte zu verstehen ... Vielleicht erst einmal Texte lesen und versuchen, diese zu verstehen...

Aber mir wird das hier zu blöd - Diskussionen mit Dir führen zu nichts - aber wenn Du unser Troll TobiasNRW bist, dann erklärt sich vieles von alleine.

Er hat seinen Code gezeigt und gefragt wo der Fehler ist. Also habe ich den Fehler genannt, nicht mehr nicht weniger. Nach einem Refactoring hat er nicht gefragt. Nach testbaren Code auch nicht. Selbst wenn es testbar sein muss, wäre auch eine einzelne Methode testbar. Der Rest von euch war Buzzwordbingo.
Hier geht es um einen Anfänger, der Probleme hat, eine Aufgabe zu lösen. Wenn man da helfen will, dann reicht es nicht, mal eben einen Code hin zu klatschen. Dann geht es darum, zu schauen, wo denn die Probleme sind um diese dann zu beheben.
 
M

Mart

Gast
kneitzel kann es nicht. Ich würde da nicht von einer Weiterentwicklung sprechen.
tatsächlich ! kneitzel kann nicht so schlechten code schreiben, weil er da schon lange drüber hinweg ist, das mit dem schlehcten code wrid halt immer weniger je weiter man sich entwickelt, deswegen ist der code bei dir auch schlecht da du einfach noch nicht so weit bist aber das ist ja auch in ordnung :)
 
K

kneitzel

Gast
kneitzel kann es nicht. Ich würde da nicht von einer Weiterentwicklung sprechen.
Ja, ich kann vieles nicht. Nur was meinst Du?

Textverständnis meinst du nicht - da hast du ja massive Probleme ...

Programmieren kannst du auch nicht meinen, denn diesbezüglich habe ich hier nichts gezeigt...

Also was meinst du hier bewerten zu können?
 

me-ton

Mitglied
tatsächlich ! kneitzel kann nicht so schlechten code schreiben, weil er da schon lange drüber hinweg ist, das mit dem schlehcten code wrid halt immer weniger je weiter man sich entwickelt, deswegen ist der code bei dir auch schlecht da du einfach noch nicht so weit bist aber das ist ja auch in ordnung :)
Es ist ja rührend, wie du dich um kneitzel sorgst, aber er braucht einfach noch etwas Zeit um besser zu werden.
 
K

kneitzel

Gast
Es ist ja rührend, wie du dich um kneitzel sorgst, aber er braucht einfach noch etwas Zeit um besser zu werden.
Ja, ich arbeite täglich an mir. Solltest du auch mal versuchen!

Daher finde ich es so verschwendete Zeit, mich mit einem Troll hier im Forum herum schlagen zu müssen.
 
M

Mart

Gast
Wer diese einfache Aufgabe nicht lösen kann, sollte gar nicht erst programmieren.

Neben den von kneitzel gezeigten Pattern (welche auch immer das sein mögen...) gibt es auch noch weitere Metriken, die in diesem Fall wichtiger sind.
Er hat seinen Code gezeigt und gefragt wo der Fehler ist. Also habe ich den Fehler genannt, nicht mehr nicht weniger. Nach einem Refactoring hat er nicht gefragt. Nach testbaren Code auch nicht. Selbst wenn es testbar sein muss, wäre auch eine einzelne Methode testbar. Der Rest von euch war Buzzwordbingo.
ich möchte nur mal anmerken dass diese 2 nachrichten nicht mal 10 min auseinander liegen... könntest du nächstes mal deinen schwachsinn wenigstens in eine Richtung verteilen ? und dichn icht selbst ins aus schießen?
 

me-ton

Mitglied
Daher dann einfach einmal ein (fiktives) Beispiel:
Das hat nichts mit seiner Aufgabe zu tun. Thema verfehlt.

Und wenn man dann den Code erweitern muss
yagni

Das einfach einmal um einen Weg aufzuzeigen, wie man zu so einem Code kommen kann.
der unnötig ist.

Nur zur Info: Jeder einzelne print/println Aufruf ist bereits eine eigenständige Methode. Ich brauche mir also nicht die Mühe machen und zusätzliche Methoden einzuführen, die die Lesbarkeit verschlechtern. Und das gleiche gilt auch für das splitten der Logik.

Ich weiß nicht wann oder wo du programmieren gelernt hast, aber dein Verhalten wäre in jedem Team toxisch und kontraproduktiv. Anstatt eine einfache Aufgabe zu lösen, entstehen einfach mal 10 weitere Probleme.
 
K

kneitzel

Gast
Das hat nichts mit seiner Aufgabe zu tun. Thema verfehlt.
Das Beispiel demonstriert das Vorgehen. Das, was ich in Posts davor dargstellt habe. Wenn Du etwas genauer lesen würdest, dann würdest Du nicht so schlicht dumme Kommentare verfassen.

Wie alt bist Du? 12? Du benimmst Dich hier wie ein kleiner, pubertierender Junge!
Der TE hat doch mit seiner Frage bewiesen, dass er eben doch genau etwas ind er Art benötigt. Er hat Probleme mit so einer einfachen Aufgabe, also versucht man ihm, Wege aufzuzeigen, wie man zu der Lösung kommen kann. Ist natürlich dann extrem blöd fpr den TE, wenn ein Forentroll die Aufgabe so herausfordernd findet, dass er auch probieren muss, ob er sie lösen kann (Ja gratuliere - das hätte ich Dir nicht zugetraut!)

der unnötig ist.
Für Dich. Aber selbst Du wirst bei komplexeren Dingen vermutlich etwas ähnliches tun. Du wirst es nicht so nieder schreiben, aber du wirst Algorithmen skizzieren udn vermutlich auch visualisieren. Die Frage ist lediglich, ab welcher Komplexität Du das brauchst. Und in welcher Form Du das machst.
Balanced Search Trees - wenn es da um rechts / links Drehungen geht: Machst Du da evtl. auch eine Skizze und schaust, wo welcher Knoten hin muss? ==> Wäre unter dem Strich nichts anderes!
Nur zur Info: Jeder einzelne print/println Aufruf ist bereits eine eigenständige Methode. Ich brauche mir also nicht die Mühe machen und zusätzliche Methoden einzuführen, die die Lesbarkeit verschlechtern. Und das gleiche gilt auch für das splitten der Logik.
Soll ich Dir die Grundlagen des CleanCode vermitteln? Also da die Methode hier reine Ausgabe liefert, würde ich auf jeden Fall Logik von Ausgabe trennen. Das macht schon das Testen einfacher. Und es ging bei mir nie darum, das reine print oder prntln in eine eigene Methode zu stecken. Daher wäre die Frage: Probleme mit dem Textverständnis?

Ich weiß nicht wann oder wo du programmieren gelernt hast, aber dein Verhalten wäre in jedem Team toxisch und kontraproduktiv. Anstatt eine einfache Aufgabe zu lösen, entstehen einfach mal 10 weitere Probleme.
Wo entstehen weitere Probleme? Du bringst lauter Thesen und untermauerst nicht eine! Das ist einfach nur peinlich! Es wäre so schön konstruktiv, wenn Argumente kommen würden ... Dann könnte man DInge bewerten.

Aber so ist das hier einfach nur ein kindisches Verhalten einer Person, die mental auf dem Niveau eines 12jährigen steht. Da hat Dir jemand widersprochen und dann gehst Du jetzt alles durch und suchst nach Dingen, die Du der bösen Person an den Kopf werfen kannst. Sorry, aber schon einmal daran gedacht, Dir professionelle Hilfe zu holen? Für einen Erwachsenen ist das kein "normales" (akzeptiertes, von der gesellschaft anerkanntes) Verhalten! Das ist wie ein Kleinkind, das sich schreiend auf den Boden wirft. ja, wirklich lustig, aber für die, die direkt betroffen sind einfach nur ein Ärgernis.

Also klare Ansage: Wenn Du so weiter machst, dann musst Du Deine Süssigkeit wieder ins Regal zurück legen! ;)
 
M

Mart

Gast
Nur zur Info: Jeder einzelne print/println Aufruf ist bereits eine eigenständige Methode. Ich brauche mir also nicht die Mühe machen und zusätzliche Methoden einzuführen, die die Lesbarkeit verschlechtern. Und das gleiche gilt auch für das splitten der Logik.
ich würde dir sehr empfehlen immer alles static zu machen und immer auf public zu setzen somit kannst du in java am besten einzeiler schreiben und der schmarn mit objekten und lesbar keit und so alles wofür modernes programmieren steht brauchst du dann auch nimmer
 
K

kneitzel

Gast
Für die Antwort muss ich mich schon fast überwinden. Aber trotz der Gefahr, die durch einen Störenfried ausgeht, habe ich das Gefühl, dass es Dich @Mart durchaus interessiert. Daher erlaube ich mir da auch noch einmal, meine kleine Sichtweise darzustellen. (Und ich habe natürlich absolut keine Ahnung - daher muss @me-ton auch nicht erst antworten. Es ist allen klar, dass ich nur Müll schreibe :) )
yagni bezieht sich auf code den du nicht brauchst wenn du die aufgabe gelöst hast zb wenn ich den code covern lasse und die methode nicht dabei ist dann gehört sie nicht in den code
clean code usw... ich mag eig nicht mehr, schau dir SOLID an
Ja und ein kleines bisschen nein. Die Grundidee hast Du durchaus richtig wieder gegeben. Ich möchte das aber einfach im Anschluss etwas tiefer betrachten. (Ich weise noch einmal ausdrücklich darauf hin: Das ist keine Kritik an Deiner Aussage! Nur eine Vertiefung. Die bisher stattgefundenen Entgleisungen reichten und ich würde gerne konstruktiver werden.)

Hier würde ich @me-ton aber durchaus anrechnen, dass man dies etwas weiter fassen könnte. Wobei aber klar ist, dass man dann sehr viel passend sagen kann: KISS würde ggf. besser passen als YAGNI. Aber die Übergänge sind fließend. Die Frage ist: Macht eine Unterteilung Sinn? Aber da hatten wir in vergangenen Diskussionen eine sehr schöne Aussage: Es hängt von der Zielgruppe ab, die den Code lesen können soll. Und hier haben wir ganz klar Anfänger und da ist immer sinnvoll, es möglichst weit zu unterteilen. Denn wenn man eine Schleife mit zwei Dingen drin hat, dann wird es schon problematisch, da Änderungen vorzunehmen -> 1 Schleife mit 2 Aktionen ist also ganz offensichtlich schon Grenze.

Wenn wir hier etwas Clean Code betrachten, dann halte ich das Single Responsibility für sehr wichtig. Wir haben eine Methode, die mehrere Dinge enthält:
- Das laufen über einen Bereich
- Die fachliche Bewertung eines Elements
- Die Ausgabe
Hier macht eine Aufteilung also durchaus Sinn. Und das nicht nur auf Methoden-Ebene sondern auch auf Klassenebene. Dann gibt es eine MagicSeven Klasse und die hat ein value und kann angeben, ob der Wert ausgegeben werden soll oder nicht. Man hat hier auch mehrere Regeln. Das könnte also auch eine Klasse sein. Dann wird das schnell ein MagicNumber und eine Reihe von Regeln. Dann kann Magic7 auch schnell auf FizzBuzz angepasst werden oder so.

Und hier wird dann YAGNI schnell wichtig. Ich implementiere natürlich nichts, was ich noch nicht brauche. Also tatsächlich kein künstliches aufblähen von Code. Es gibt ein MagicSeven und keine universelle MagicNumber und auch nicht universelle Regeln und so. Das beispiel taugt dann ggf. auch, die Schwäche deiner Definition aufzuzeigen: Der geschriebene Code wäre alles benutzt. Aber dennoch wäre es nicht notwendig, diese massive Aufteilung zu machen. YAGNI wäre also anwendbar. Aber auch hier: KISS passt. Wenn ich es einfach halte, dann brauche ich diese ganzen Dinge schlicht nicht.

Das einfach einmal als eine kleine, vertiefende Sichtweise von mir in der speziellen Hoffnung, dass Du @Mart das zumindest interessant gefunden hast.
 

Michaaa

Neues Mitglied
Wir vermeiden es in der Regel, so fertige Lösungen hin zu klatschen. Der Lerneffekt geht so leider gegen Null und dem TE wird die Chance genommen, selbst zu verstehen, wie so eine Aufgabe eigenständig gelöst werden kann. Und da darauf immer mehr Stoff aufbauen wird, wird es ihm in der Zukunft nur noch schwerer fallen.

Und der erste Schritt ist nun einmal das Erkennen des generellen Vorgehens und das hätte man dann so formulieren können:

Für jede Zahl von 1 bis 100 schaue ich:
- Ist die Zahl durch 7 teilbar?
--> ja: Ich zeige ein * an.
--> nein: Ich zeige die Zahl an.
- Wenn 10 Zahlen angezeigt wurden, dann gehe ich in die nächste Zeile.

Oder wenn man das mit Methoden macht, wie ich es zuletzt gemeint habe:
Für jede Zahl von 1 bis 100
- Soll die Zahl gedruckt werden?
--> Ja: Drucke die Zahl.
--> Nein: Drucke ein *
- wurden 10 Zahlen angezeigt? ja: gehe in die nächste Zeile.

Hier hat man den Vorteil, dass nun die Prüfung eine eigenständige Methode ist. Da kommt dann am Ende lso etwas raus wie:

Java:
static public boolean printNumber(int number) {
    if (number % 7 == 0) return false;
   
    return true;
}

Und wenn man dann den Code erweitern muss ("Dasselbe gilt für alle Zahlen, die einen 7er an der Einer- oder Zehnerstelle enthalten."), dann wird es deutlich einfacher, weil der Code, der angepasst werden muss, deutlich einfacher ist:
Java:
static public boolean printNumber(int number) {
    if (number % 7 == 0) return false;

    // Hier kommen dann einfach weitere Prüfungen rein, ggf. per weiterer Methode, die aufgerufen wird.

    return true;
}

Das einfach einmal um einen Weg aufzuzeigen, wie man zu so einem Code kommen kann.

Wichtig ist aus meiner Sicht: Schrittweises Vorgehen! Lieber viele einfache Schritte, die kaum Komplexität haben als ein großen Schritt. Daher eine komplexe Sprache wie Java außen vor lassen, wenn man den Algorithmus noch nicht hat! Erarbeite den Algorithmus in einer Sprache, die Du beherrschst!
Hat aber genauso wenig einen Lerneffekt wie ihm eine komplette while schleife hinzuklatschen das zehn millionen if else abfragen drinne hat.
 
K

kneitzel

Gast
Hat aber genauso wenig einen Lerneffekt wie ihm eine komplette while schleife hinzuklatschen das zehn millionen if else abfragen drinne hat.
Was wäre denn deine Idee, wie einem Anfänger der Weg vermittelt werden kann? Und was wäre Deiner Meinung nach ein möglichst universeller Weg, den Anfänger verstehen könnten?

Wenn es da bessere Ideen gibt, so bin ich da ganz Ohr.

Dabei sind halt ein paar Dinge aus meiner Sicht wichtig:
a) Der Fragesteller sollte es möglichst behalten: https://www.fernstudieren.de/im-studium/effektives-lernen/die-psychologie-des-lernens/
--> Es ist also sinnvoll, den Fragesteller aktiv selbst etwas tun zu lassen.
b) Eine Bestätigung, dass etwas gelernt / verstanden wurde.
--> Wenn die Lösung also vom Fragesteller kommt, dann ist relativ sicher, dass er es verstanden hat.

Aber ja - es ist blöd und aufwendig, sowas aus einem Fragesteller heraus zu kitzeln. Und da kostet so Post ein vielfaches von der Zeit, so einen Code zu schreiben. Daher auch meine Frage: Ich würde mich über konstruktive Vorschläge freuen.
 

me-ton

Mitglied
while (!haufen.isEmpty()) { Document document = getFirstDocument(haufen); if (isAdvertisement(document)) { putToGarbage(document); } else if (isInvoice(document)) { if (isTaxRelevant(document)) { putToTaxDocuments(document); } else if (isHouseRelated(document)) { punchHoles(document); putIntoHouseFolder(document); } else { putToOtherInvoices(document); } } else { putToOtherLetters(document); } }
Achso, das hier meinte @Michaaa . Das ist richtig, das ist einfach am Thema vorbei.
 
K

kneitzel

Gast
Achso, das hier meinte @Michaaa . Das ist richtig, das ist einfach am Thema vorbei.
Wenn Du diese These bitte mit Argumenten belegen würdest. Das war lediglich ein Beispiel für eine Methodik, wie man an so ein Thema heran gehen kann.

Daher kann man gerne über Alternativen bei der Herangehensweise diskutieren (Diskussion bedeutet aber: Argumente bringen! Das nur ganz am Rande). Aber die Aussage, dass dies am Thema vorbei ist, ist natürlich mal wieder absoluter Quatsch bzw. zeugt von extrem schlechter Wortwahl / Ausdrucksweise.
Thema war ein klares Problem.
Dann ist das zeigen einer Methode, wie so ein Problem generell gelöst werden könnte, wohl kaum am Thema vorbei.

Aber so sprachliche Feinheiten sind nicht Dein Ding, das habst Du im anderen Thread ja schon sehr ausführlich demonstriert :)
 

me-ton

Mitglied
Es hatte nichts mit seiner Frage zu tun und du wolltest einfach nur mal wieder viel Text schreiben. Aber lassen wir das, dein Niveau werden wir woll niemals erreichen, Mr. Allwissend...
 
K

kneitzel

Gast
Es hatte nichts mit seiner Frage zu tun und du wolltest einfach nur mal wieder viel Text schreiben. Aber lassen wir das, dein Niveau werden wir woll niemals erreichen, Mr. Allwissend...
Ja, Deine Aversion gegen Text kann ich durchaus verstehen. Ich stelle mir das wirklich schrecklich vor, wenn man so massive Probleme mit dem Textverständnis hat. Ständig versteht man einfache Aussagen nicht und kann sich auch nicht verständlich rüber bringen.

Aber gib Dich nicht auf! Lern Lesen und Schreiben! (Ja, ist nur eine Frage der Übung! Der Trend ging vor dem Jahr 2000 schon zum Zweitbuch!)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
berserkerdq2 Intelij, wie kann ich einstellen, dass die aktuelle Klasse ausgeführt wird, wenn ich aufs Startsymbol drücke, gibts da eine Tastenkombination? Java Basics - Anfänger-Themen 11
I Grundsatzfrage: Belegt eine Referenz auf 'null' RAM, und wenn ja - wieviel ;-) ? Java Basics - Anfänger-Themen 5
berserkerdq2 Findet eine parallele Verarbeitung in Java bei Threads erst statt, wenn man die Methoden auch synchronized? Und wie sieht bei Conditions aus? Java Basics - Anfänger-Themen 8
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
M Wie lassen sich Objektkonstanten initialisieren, wenn sie eine Bedingung erreichen? Java Basics - Anfänger-Themen 6
E Warum lässt sich eine Klasse nicht starten, wenn eine andere Klasse in dem Modul fehlerhaft ist? Java Basics - Anfänger-Themen 1
R Warnung, wenn eine Variable eingegeben wird Java Basics - Anfänger-Themen 6
N Variablen ändern wenn eine andere geändert wird Java Basics - Anfänger-Themen 7
S Farbe eine Zeile in JTable ändern, wenn JButton geklickt wurd Java Basics - Anfänger-Themen 4
Anfänger2011 Wie bricht man alles ab wenn eine Bedingung nicht erfüllt ist? Java Basics - Anfänger-Themen 21
B Was passiert, wenn eine konkrete Klasse von generische Klasse erbt? Java Basics - Anfänger-Themen 14
M String mit ist eine Zeile wenn in Textdatei geschrieben Java Basics - Anfänger-Themen 5
T Aufruf der Methode einer Oberklasse, wenn sie in der Unterklasse überschrieben ist. Polymorphie. Java Basics - Anfänger-Themen 2
C was heisst es wenn java ']' erwartet ? Java Basics - Anfänger-Themen 2
C Was tun wenn .class erwartet wird ? Java Basics - Anfänger-Themen 6
N Was Passiert mit dem Namen einer Variable, wenn man diese einer Liste Hinzufügt Java Basics - Anfänger-Themen 16
Alex_99 Aktion ausführen wenn Frame disposed wurde Java Basics - Anfänger-Themen 5
berserkerdq2 sqllite in Java, wenn ich mache select count(*) ..., erhalte ich dann nur die gezählte Anzahl oder werden auch die Tabellen ausgegeben? Java Basics - Anfänger-Themen 2
berserkerdq2 Brauche ich while != -1, wenn ich immer einen BufferedReader verwende? Java Basics - Anfänger-Themen 8
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
A String split funktioniert nicht, wenn mehr als 1 Ziffer vor dem Zeichen steht nach dem er trennen soll? Java Basics - Anfänger-Themen 4
U Warum kann ich, auf private Variablen zugreifen, wenn ich ein Objekt in der Klasse, die private Variablen hat erstelle und dort drauf zugreifen will? Java Basics - Anfänger-Themen 7
E Mysql Update wenn es nicht existiert insert Java Basics - Anfänger-Themen 14
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
K Erste Schritte Wie schnell ist LinkedHashMap im Vergleich zur ArrayList, wenn alle Entries durchlaufen werden? Java Basics - Anfänger-Themen 47
F Initialisieren eines Web-Mp3 Players in Tabs durch "booleans" erst wenn Tab geöffnet wird ...? Java Basics - Anfänger-Themen 1
A 2 Strings vergleichen in einer methode wenn man mit Globalen variablen arbeitet Java Basics - Anfänger-Themen 12
S Methoden - Warum int wenn auch void? Java Basics - Anfänger-Themen 3
S Algorithmus Datensätze einfügen wenn... Java Basics - Anfänger-Themen 26
T Methode schreiben, die einem Array ein Stringelement hinzufügt, wenn dieses noch nicht enthalten ist. Java Basics - Anfänger-Themen 6
M Was habe ich hier falsch, dass wenn ich z.B.: 11 eingebe mir false zurück gegeben wird? Java Basics - Anfänger-Themen 2
B DateTimeFormatter nach LocalDateTime, wenn dd.MM.yyyy oder dd.MM.yyyy mm:hh Java Basics - Anfänger-Themen 5
S Laufzeit Quicksort wenn alle Elemente gleich sind Java Basics - Anfänger-Themen 4
M Wie kann ich ein Objekt erstellen, wenn sich der Klassenname in einer Variablen befindet? Java Basics - Anfänger-Themen 10
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
S Spiel-Programmieren. Wenn ein Objekt den anderen berührt. Java Basics - Anfänger-Themen 6
L Worauf muss ich achten, wenn ich externe Bibliotheken für meine Anwendungen verwende? Java Basics - Anfänger-Themen 6
C Ganzzahlige Werte in Boolean ausgeben und überprüfen ob Primzahl oder nicht, wenn es keine Primzahl ist soll es die Primfaktorzerlegung ausgeben Java Basics - Anfänger-Themen 4
R Error, wenn mehrere Clients gleichzeitig die Verbindung beenden Java Basics - Anfänger-Themen 16
V NullPointerException, wenn Key und Value null sind Java Basics - Anfänger-Themen 2
D Warum nicht true wenn Array leer ist? Java Basics - Anfänger-Themen 8
scratchy1 Variablen vertauschen wenn Bedingung "umgedreht" wird Java Basics - Anfänger-Themen 40
N Was passiert wenn wir Daten auf der Festplatte abspeichern wollen? bzgl. BufferStreams Java Basics - Anfänger-Themen 9
G Teil(e) eines Strings entfernen wenn spezifische Zeichen (< & >) vorkommen Java Basics - Anfänger-Themen 5
D Wenn ich repaint(); mache, flackert es so stark, das man fast nichts erkennen kann. Java Basics - Anfänger-Themen 11
T Wenn JFrame Textfelder Hintergrund Grün dann... (if) Java Basics - Anfänger-Themen 3
C Tabs in JTabbedPane wechseln, wenn Tabs in eigenen Klassen sind Java Basics - Anfänger-Themen 2
I JFrame minimieren wenn anderes Programm minimiert wird Java Basics - Anfänger-Themen 1
H Script ausführen wenn Browser Notification eingetroffen ist? Java Basics - Anfänger-Themen 3
K Methoden Methode starten wenn JFrame geöffnet wird Java Basics - Anfänger-Themen 2
I Shutdown wenn kein Strom verfügbar Java Basics - Anfänger-Themen 4
W Es wird erst gezeichnet, wenn ich das Fenster vergrößere? Java Basics - Anfänger-Themen 20
B FileWatcher : Erst Rückmeldung wenn komplett kopiert? Java Basics - Anfänger-Themen 3
E Wenn i (for-Loop) bestimmter Wert, dann neue Zeile eines Buttons Java Basics - Anfänger-Themen 7
Tacofan Hangman - ist der Buchstabe vorhanden wenn ja wo kommt er vor Java Basics - Anfänger-Themen 6
T Klassen In Eingabefeld von externem Programm schreiben wenn angewählt. Java Basics - Anfänger-Themen 6
F Erste Schritte Hausaufgaben-Prob. - Iterative Prog. Zahlen aufsummieren, wenn durch k>0 teilbar. Java Basics - Anfänger-Themen 5
Excess Operatoren Wenn Variable x den Wert y hat, dann mach was Java Basics - Anfänger-Themen 11
J ServerSocket: Problem, wenn Clientverbindung gekappt wird. Java Basics - Anfänger-Themen 1
S Java Counter: nur 1 mal hochzählen auch wenn Abfrage mehrmals zutrifft. Java Basics - Anfänger-Themen 1
S Kommt es zu Seiteneffekten wenn man waehrend den laufenden JUnit Tests den Code aendert? Java Basics - Anfänger-Themen 2
N Input/Output Wenn kein Input, dann Fehler anzeigen lassen im JFrame Java Basics - Anfänger-Themen 6
D In Arrayfeld schreiben wenn leer Java Basics - Anfänger-Themen 8
T Klasse von erfahren wenn Obertyp Parameter ist Java Basics - Anfänger-Themen 6
T Wenn Schaltjahr ist, soll Februar, einen Tag mehr haben, GUI mit combobox Java Basics - Anfänger-Themen 4
I Zwei Listen: Wenn nicht vorhanden löschen Java Basics - Anfänger-Themen 4
M FileWriter Neue Datei wenn aktuelle "zu groß" Java Basics - Anfänger-Themen 3
P Aktion ausführen wenn Button geklickt wird Java Basics - Anfänger-Themen 7
DStrohma Operatoren Kleiner-Zeichen in Größer-Zeichen ändern wenn boolen true? Java Basics - Anfänger-Themen 6
P Methoden suche funktion die char wert ausgibt wenn man numerischen wert und radix angibt Java Basics - Anfänger-Themen 1
F Scanner + Stringbuilder geben leeren String aus wenn Umlaute enthalten sind Java Basics - Anfänger-Themen 29
S TextFieldFilter - Wenn Textfeld leer dann setze 0 Java Basics - Anfänger-Themen 9
P Ausnahme, wenn Attribut nicht definiert Java Basics - Anfänger-Themen 4
A scan.nextLine() - Wenn man zu lange nichts macht, soll etwas passieren Java Basics - Anfänger-Themen 3
Todesbote Treeset - Wenn bestimmtes Objekt vorkommt Counter erhöhen Java Basics - Anfänger-Themen 6
D jProgressBar soll bei 100% sein wenn sql Abfrage inkl. jTable schreiben fertig ist... Java Basics - Anfänger-Themen 5
W Methoden Ausgabe true wenn nur Ziffern <= 1 vorhanden Java Basics - Anfänger-Themen 9
A Pinabfrage nur wenn Kondition zutrifft Java Basics - Anfänger-Themen 10
S Threads Thread wenn extends schon vergeben Java Basics - Anfänger-Themen 8
S Abfragen wenn das ende einer Tabelle erreicht ist Java Basics - Anfänger-Themen 8
B Schlüsselworte this - immer oder nur wenn wirklich notwendig? Java Basics - Anfänger-Themen 9
X Wenn Exception dann nochmal try. Java Basics - Anfänger-Themen 7
A Wenn genau welche Liste verwenden? Java Basics - Anfänger-Themen 6
E Variable neue Random Zahl zuweisen, wenn Button geklickt Java Basics - Anfänger-Themen 5
S 0 wird negativ, wenn sie mit etwas negativen multipliziert wird. Warum? Java Basics - Anfänger-Themen 4
V Objekt löschen wenn anderes gelöscht wurde Java Basics - Anfänger-Themen 11
P new File wenn File already exists? wie? Java Basics - Anfänger-Themen 2
D Was kommt raus, wenn NaN mit einer Zahl verglichen wird? Java Basics - Anfänger-Themen 5
S Input/Output Reader: "null" wenn While-Ende Java Basics - Anfänger-Themen 5
L Erste Schritte Wenn Textfield.Text = ... dann Java Basics - Anfänger-Themen 16
O KeyListener funktioniert nur wenn er will Java Basics - Anfänger-Themen 2
F sound nur abspielen, wenn er nicht läuft Java Basics - Anfänger-Themen 6
S ArrayList nur ergänzen wenn Element noch nicht vorhanden Java Basics - Anfänger-Themen 4
ruutaiokwu final wenn immer möglich verwenden? Java Basics - Anfänger-Themen 30
N Serialization, Laden klappt nicht wenn die Klasse geändert wurde Java Basics - Anfänger-Themen 3
G Klasse überschreiben wenn Rückgabe über Methode Java Basics - Anfänger-Themen 6
F While Schleife ausführen, wenn String gleich ist. Java Basics - Anfänger-Themen 2
M Java-Programm wird beendet, wenn ich Spiel öffne... Java Basics - Anfänger-Themen 11
T TCP, Empfang nur wenn wirklich etwas kommt Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Neue Themen


Oben