Frage zu Calculator Beispiel

  • Hallo,
    vielleicht gehts anderen Leuten die bislang kaum programmiert haben genau so wie mir und wissen einfach nicht weiter. :/
    Ich sitz jetzt schon 3 Tage vor dem Beispiel aber hab keine Ahnung, wie ich das mit dem Wissen das bislang in der VO gekommen ist in ein fertiges Programm umwandeln soll.
    Ich hab zwar eine ungefähre Ahnung wie ich es machen könnte, aber scheitere dann bei der praktischen Umsetzung. :(


    Ich bin mir z.B. nicht sicher, wie ich genau die Methoden definieren soll, bislang hab ich nur Methoden gesehen, bei denen man keine Werte übergeben soll.
    Beziehungsweise versteh ich nicht wie man die Methoden dann abrufen soll ohne Erstellung eines Objektes oder einer eigenen Klasse auf die verwiesen werden soll, laut Angabe wird nur eine Klasse Calculator.java für die Abgabe benötigt. :(
    Vielleicht hat jemand für mich irgendeinen kleinen Denkanstoss wie man die ganze Sache angehen/aufbauen kann weil ich fürchte ich drehe mich momentan nur im Kreis, ich danke vielmals im vorhinein!

  • Quote

    Ich hab zwar eine ungefähre Ahnung wie ich es machen könnte, aber scheitere dann bei der praktischen Umsetzung.


    Warum sagst du uns dann nicht was für Gedanken du bisher dir über das Programm gemacht hast? Denn so weiß ich nicht wirklich was dein Problem ist. Du könntest deine Gedanken auch als Pseudocode schreiben, und einfach die Zeilen markieren die du nicht in Java-Code umsetzen kannst.


    Ich nehme einmal an, dass du das Runde1-Calculator-Beispiel meinst. Wenn das so ist, dann verstehe ich nicht, warum du dir Gedanken über Methoden machst. Denn für dieses Beispiel ist es nicht notwendig Methoden zu verwenden oder gar Objekte zu erzeugen. Man kann alles linear in die main()-Methode schreiben.


    Nun will ich noch versuchen ein grobes Schema wie man vorgehen könnte, um das Beispiel zu lösen, zu schreiben:
    Zuerst ließt man die 3 Parameter (2 Zahlen, Operator) ein.
    Für die Zahlen kann man nextInt() verwenden und bei dem Operator next().charAt(0). Da nextInt() eine Exception wirft, wenn keine Zahl eingegeben wird, muss man diese in einem try-catch-Block abfangen.
    Wenn die Eingaben passen, dann muss man nur noch mit if-else if... abfragen welchen Operator man hat und dann die Rechnung durchführen und dann Ausgeben.


    PS: ich gehe zur Zeit in keine EPROG-VOs -> kann sein, dass ich manches verwende was ihr noch nicht gelernt habt. Aber in einem solchen Fall hilft ein gutes Buch, Google (oder eine andere Suchmaschine euer Wahl).
    Falls ihr wirklich etwas nicht finden solltet, dann postet es halt, wird sich wahrscheinlich wer finden, der das erklärt.
    PPS: ich hoffe meine Erklärung war halbwegs verständlich. Ist aber schwierig einen Programmaufbau zu erklären ...



    Gruß,
    Reinhard

  • Hallo!


    Wirklich, wie hast du das angestellt? :shinner:
    Einfach if(operator.quals("+")) {
    System.out.println(a+b) } anstatt von Methoden oder wie?


    Ja, genau so, es wird doch nicht verlangt, dass wir die Methoden schreiben:) und man muss nur eine Klasse abgeben:)
    Nur bau noch die Fehlerbehandlung ein:)

  • Wie habt ihr die Eingabe "2 1" behandelt? Glaubt ihr ist es i.O. wenn man einfach die NoSuchElementException abfaengt? So krieg ich zumindest den richtigen Output mit meinem Code.

    opentu.net - freier, unzensierter Informationsaustausch -
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum.

  • Wie habt ihr die Eingabe "2 1" behandelt? Glaubt ihr ist es i.O. wenn man einfach die NoSuchElementException abfaengt? So krieg ich zumindest den richtigen Output mit meinem Code.


    Wie der richtige Anfänger :shinner: überhaupt ohne Exception abzufangen:shinner: einfach
    if ..... else fehler=true;
    if ..... else fehler=true;
    und am ende if(fehler) System.out.println("FALSCHE EINGABE");

  • [...] und bei dem Operator next().charAt(0). [...]


    Da wuerde ich aber mindestens noch als Kommentar dazuschreiben dass er auch "1 2 ++++++****--" akzeptiert (habs genauso gemacht wie du). Nicht dassman dann dafuer Punkteabzuege kassiert :/

    opentu.net - freier, unzensierter Informationsaustausch -
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum.

  • Ich hab kein .charAt(0) gemacht ... ist ja auch nicht wirklich nötig, vergleicht man halt mit .equals() anstatt mit ==


    Aber dazuschreiben das er auch +-ABC als Operator akzeptiert ist natürlich auch eine Möglichkeit, wobei ich es eigentlich schöner finde wenn der Rechner sowas nicht akzeptiert.


    lg Stefan

  • Das ganze kann man auch sehr elegant mit einer switch-Anweisung erledingen:



    Lg,
    Reinhard

  • Hi,


    Also ich mache gerade diese Aufgabestellung zum üben (habe ascii gelöst)
    Und wenn ich meine if-schleife durchrennen lasse, also;


    if(ok == true){
    while(eingabe.hasNext()){
    if(operator.equals("+")){
    System.out.println(a+b);
    break;
    }
    if(operator.equals("-")){
    System.out.println(a-b);
    break;
    }
    if(operator.equals("/")){
    System.out.println(a/b);
    break;
    }
    if(operator.equals("*")){
    System.out.println(a*b);
    break;
    }
    }
    }
    else{
    System.out.println("FALSCHE EINGABE");
    }


    bekomme ich die fehlermeldung, dass ich die varible "operator" noch nicht defeniert habe...


    also weiter oben hab ich dieses stehen;
    String operator; (vll. is das zu wenig??!!)


    kann mir wer weiterhelfen?


    Greetz

    "ISCH VERSPRESCHE, ISCH HÖRE AUCH FREIWILLISCH FRÜHER AUF"
    O.Univ.Prof. Dipl.-Ing. Dr.techn. Gerhard-Helge Schildt

  • Du musst "operator" auch irgendwo einen Wert zuweisen und das machst du nicht. z.B.:


    Code
    1. operator = eingabe.next()


    Denn du kannst kein leeres Objekt (String) mit irgendwas vergleichen.



    Lg,
    Reinhard

  • Das ganze kann man auch sehr elegant mit einer switch-Anweisung erledingen:



    Lg,
    Reinhard



    Genau da fangt mein Maleur an, weil ein switch kann man afaik nur mit primitiven Datentypen konstruieren, und genau dann brauchtman einen Character fuer den Operator, und dann erlaubtman leider Eingaben wie "1 1 ++''++++13r432r2rwegftregerht7n432q87thn3q48t432t7" :)


    Die Frage ist, wie relevant das fuer das Beispiel ist. Ich hab zum Beispiel einfach als Kommentar dazugeschrieben dass man, wenn man immer nur eine genaue Eingabe erlauben will, ein if-ifelse-else Konstrukt bauen sollte, ich diese Lösung aber etwas eleganter finde, da das switch wesentlich uebersichtlicher ist.

    opentu.net - freier, unzensierter Informationsaustausch -
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum.


  • also weiter oben hab ich dieses stehen;
    String operator; (vll. is das zu wenig??!!)


    Wenn du einen String mit etwas anderem vergleichen willst darfst du nicht == verwenden!
    Du musst also (operator.equals("...")) schreiben.


    Das ist leider eine Eigenheit von Strings...


    Ich glaube, für den Zweck wäre ein boolean besser. Den kannst du dann mit == vergleichen.


  • ja du hast recht...war wohl spät gestern *gg*...
    Habe aber noch immer probleme mit dem ergebnis :(

    "ISCH VERSPRESCHE, ISCH HÖRE AUCH FREIWILLISCH FRÜHER AUF"
    O.Univ.Prof. Dipl.-Ing. Dr.techn. Gerhard-Helge Schildt


  • also ich mache es immer so: String operator = ""; oder " " und dann im laufe des programms bekommt operator einen anderen wert

  • Quote


    Genau da fangt mein Maleur an, weil ein switch kann man afaik nur mit primitiven Datentypen konstruieren, und genau dann brauchtman einen Character fuer den Operator, und dann erlaubtman leider Eingaben wie "1 1 ++''++++13r432r2rwegftregerht7n432q87thn3q48t432t7 " :)


    Einfache Lösung: man überprüft zuerst die Länge der Eingabe und wenn die Länge 1 ist, dann wendet man erst charAt(0) an.



    Quote


    Die Frage ist, wie relevant das fuer das Beispiel ist. Ich hab zum Beispiel einfach als Kommentar dazugeschrieben dass man, wenn man immer nur eine genaue Eingabe erlauben will, ein if-ifelse-else Konstrukt bauen sollte, ich diese Lösung aber etwas eleganter finde, da das switch wesentlich uebersichtlicher ist.


    Naja, eigentlich ist ein switch nichts anderes als eine is-ifelse-else Konstrukt nur übersichtlicher, und hat auch paar andere Vorteile. Aber jeder hat seinen Programmierstyle.



    Lg,
    Reinhard

  • ich hab' keine glaskugel. :engel:
    du musst deine probleme schon näher erklären, wenn du hilfe willst. :wave:


    hehe schon klar...war aber an der tu (ohne meinen laptop) deshalb konnte ich meinen code nicht mitposten...
    mittlerweile gehts schon nur bei der eingabe 4 ("1 5 10") bekomme ich kein output...alle anderen 6 vorgegebenen stimmen...

    "ISCH VERSPRESCHE, ISCH HÖRE AUCH FREIWILLISCH FRÜHER AUF"
    O.Univ.Prof. Dipl.-Ing. Dr.techn. Gerhard-Helge Schildt