Horoskop Tag Monat

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

      Horoskop Tag Monat

      Horoskop Tag Monat
      Guten Tag, sollen ein Programm programmieren was für bestimmte Tage ein Satz ausgeben soll.

      Dabei soll die Zehner und einer Stellen + der Monat berücksichtigt werden.

      Also bei dem Datum:
      24.7

      Soll für die 2 ein vorgegeben Text ausgegeben werden, für die 4 und für die 7. Also 3 Textausschnitte insgesamt.

      Das ganze ist ja auch einfach, wenn man mit 3 Eingaben arbeitet: (Eingabe 1(Zehnerstelle):2, Eingabe 2(Einerstelle): 4, Eingabe 3(Monat): 7
      Eingabe Zehner, eingabe Einerstelle und Eingabe des Monats

      Wir würden allerdings gerne nur 2 Eingaben tätige. (Einmal Tag und Monat)
      Nun wissen wir allerdings nicht, wie die Zehnerstelle erkannt werden kann.
      Umsetzen müssen wir das ganze mit einer Switch-case Anweisung, wovon wir ja 3 Stück brauchen. (Eine für die Zehnerstelle, eine für die Einerstelle und eine für den Monat)

      Bei der 1. switch-case Anweisungen müssen wir es also irgendwie hinkriegen, dass diese nur die Zehnerstelle (erste Stelle des Tages) ausliest.

      Uns wurde ganz kurz etwas mit arrays erklärt, was wir noch nicht wirklich verstanden haben. Das brauchen wir auch eig. nicht für die Aufgabe wenn man mit 3 Eingaben arbeitet und wir werden das im Unterricht zu einem späteren Zeitpunkt noch lernen.

      Hoffe ist verständlich erklärt und mir kann jemand weiterhelfen :P
      Sin 3 ganz einfache rechnungen

      1. Tag Modulu 10
      2. Tag - Ergebnis aus 1
      3. Ergebnis aus 2 / 10


      was rechnest du da kompliziert rum?
      wenn man eine integer-division durchführt, also beige operanden integer sind, kommt am ende wieder ein integer raus.
      und mit einem double kannst du kein modulO machen.. also doppelt fürn hugo.



      Quellcode

      1. String[] tenTexts = {"bla0", "bla1", "bla2"};
      2. String[] oneTexts = { "bla0",
      3. "bla1",
      4. "bla2",
      5. "bla3",
      6. "bla4",
      7. "bla5",
      8. "bla6",
      9. "bla7",
      10. "bla8",
      11. "bla9" };
      12. String[] monthTexts = { "bla0",
      13. "bla1",
      14. "bla2",
      15. "bla3",
      16. "bla4",
      17. "bla5",
      18. "bla6",
      19. "bla7",
      20. "bla8",
      21. "bla9"
      22. "bla10"
      23. "bla11" };
      24. int day; // vorher befüllen
      25. int month; // wieauchimmers du das hald einließt
      26. int monthIndex = month - 1; // Array-nummerierungen(indexe) beginnen mit 0
      27. int ten = ((int)day)/10;
      28. int one = ((int)day)%10;
      29. String output = tenTexts[ten] + " " oneTexts[one] + " " monthTexts[monthIndex];
      30. System.out.println(output);
      Alles anzeigen

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Xaw.4 ()

      @xaw um deine signatur zu zitieren: "weil Baum!"

      nein, ich finde das einfach unsauber! wenn ich eine int durch eine int teile und weiß das dabei eine zahl mit nachkommastelle rauskommt find ichs einfach unsauber wenn die nachkommastelle so abgeschnitten wird....

      deswegen:

      Quellcode

      1. int ten = (day - (day % 10)) / 10;

      Icynator schrieb:

      @xaw um deine signatur zu zitieren: "weil Baum!"

      nein, ich finde das einfach unsauber! wenn ich eine int durch eine int teile und weiß das dabei eine zahl mit nachkommastelle rauskommt find ichs einfach unsauber wenn die nachkommastelle so abgeschnitten wird....

      deswegen:

      Quellcode

      1. int ten = (day - (day % 10)) / 10;


      also wirklich... wir haben hier einen absoluten anfänger, und du willst ihm inneffizienten, unsauberen code als sauber verkaufen?
      wenn man mit einer programmiersprache Unterwegs ist, muss man sich mi seinen eigenheiten, und vorteilen auseinandersetzen.
      eines der dinge die in Java existieren (eigentlich in fast allen sprachen) ist die ganzzahldivision. das ist eine verdammt sinnvolle und viel verwendete Technik.

      bei deiner "Lösung" ist 1. nicht gut erkennbar was passiert, und 2. braucht der computer zwei bis drei mal so lange... gut letzteres ist in dem fall egal, aber aber trotzdem!

      ich habe in meinem code

      Quellcode

      1. int ten = ((int)day)/10;

      absichtlich zusätzlich einen redundanten Cast auf int hinzugefügt, um zu signalisieren "Achtung, das ist eine integer-Division - da wird was abgeschnitten!!".
      ... bevor du jetzt sagst "AHA, da muss ja bei dir auch rumgerechnet werden!!".. nein muss es nicht - der Compiler wird erkennen, dass ich von int auf int caste, und das ignorieren, und so tun als wär das gar nicht dagestanden.

      danke für die aufmerksamkeit

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von Xaw.4 ()

      ganz ehrlich?
      Ich verstehe nur Bahnhof. :D

      Wir haben jetzt 26 string Variablen deklariert mit dem jeweiligen Möglichkeiten (Zehner 0-4) (Einer 0-9) und Monat 1-12 und den jeweiligen Text zugewiesen.
      Zudem noch 2 Int Variablen für die Eingabe Tag und Monat
      Nun wollen wir in der ersten switch-case Anweisung eben die Zehner stelle analysieren, damit er die Zehnerstelle auswerten kann und dementsprechend den Text verwendet.
      @lachnicht
      26 string variablen? schlecht!
      du brauchst 3 array varriablen in die du die strings schreibst..
      eine 1 dimensionale array ist mehr oder weniger eine liste.. d.h. alles steht untereinander.

      Beispiel:

      Quellcode

      1. String[] tenTexts = {"bla0", "bla1", "bla2"};


      bedeutet ausgeschrieben nix anderes wie:

      Quellcode

      1. tenTexts[0] = "bla0";
      2. tenTexts[1] = "bla1";
      3. tenTexts[2] = "bla2";


      In den eckigen klammern steht welches element du aus der array ansprechen möchtest. Dort muss aber keine zahl stehn sondern kann auch eine int variable stehn die eben die zahl enthält welches element angesprochen werden soll. dabei musst du aber immer darauf achten das wenn dies aufgerufen wird die zahl in der variable niemals größer ist als die array groß.

      Beispiel:

      Quellcode

      1. int intvariable = 1;
      2. System.out.print(tenText[intvariable]);

      ist nichts anderes wie:

      Quellcode

      1. System.out.print(tenText[1]);


      Xaw und ich haben dir ja gezeigt wie du die Zehner und Einerstelle trennst. Diese getrennten Variablen setzt du jetzt in die eckigen Klammern und voila, das passende Element aus der Array wird ausgewählt. :)

      @Xaw.4
      Spoiler anzeigen

      Ganz ehrlich? Du regst mich grad scho weng auf... Nur weils nicht deine lösung is, is meine nicht gleich falsch!
      In meiner Rechnung ist nicht ersichtlich was passiert?! HAHA, das ich nicht lache!
      Warum ich das in nen Expander schreib? Weils nichts mit dem Thema zu tun hat!
      Ohne jetzt alles gelesen zu haben, kann man natürlich auch die Ganzzahldivision verwenden. So eine Lösung mit dem subtrahieren des Rests hab ich noch nie gesehen und würd ich auch ned verwenden. Dafür gibts in fast jeder Programmiersprache eine Math Klasse (zum runden, abschneiden usw...)

      Gesendet von meinem GT-I9100 mit Tapatalk 2

      Danke an xNiGhTMaR3x für die Signatur und Avatar =)
      @lachnicht
      ich hab noch vergessen das du von der "einer tag" und der monats variable immer noch 1 abziehn musst, da die array ja bei 0 beginnt aber du ja frühstens am 1 ten geburtstag haben kannst. bei der "zehner tag" variable ist dies nicht nötig, da dort ja eine 0 stehn kann ;)


      @dongdong
      muss ja keiner so machen ;)
      es is meine lösung und ein vorschlag (den ich auch begründet hab), dafür allerdings gleich so "angeschnauzt" zu werden gehört nicht zum feinen umgangston. das geht auch anders wie du (dongdong) beweist.
      Um ehrlich zu sein finde ich beide Lösungen eher schlecht als Recht, allerdings nehme ich ein paar Dinge an über die Eingabe des Datums. Also hier erstmal die Basis für meine Lösung:


      • Der Nutzer gibt das Datum als String in die Konsole oder so ein
      • Das Datum ist immer dd.m und niemals d.m also 01.5 bei Tagen < 10
      • Es werden nur Zahlen eingegeben also nicht bspw. aa.b
      • Eingabe ist die Eingabe als String!


      Quellcode

      1. int ten = Integer.parseInt(eingabe.substring(0,1));
      2. int digit = Interger.parseInt(eingabe.substring(1,2));
      3. int month = Integer.parseInt(eingabe.substring(3));



      Damit hast du die jeweiligen Ziffern als Integer und kannst die dann wie schon gesagt wurde als Index für Arrays nutzen. Ich bin mir jetzt nicht sicher welche Lösung die effektivste ist, aber ich denke solange es keine Zeitkritische Anwendung ist, macht der Unterschied nicht viel aus.