Ankündigung

Einklappen
Keine Ankündigung bisher.

Taschenrechner, Kommataste, Rechnungen

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Taschenrechner, Kommataste, Rechnungen

    Hallo.

    Ich habe angefangen Java zu lernen und hab mich durch das Rechnertut gearbeitet.
    Nun hab ich aber ein paar kritische Punkte und wüsste gern, wie ich die lösen kann (so lern ich auch, hab bei einer vorherigen Eigenprogrammierung eines Rechners auch immer ein zwei Probs gehabt):

    1. muss ich was besonderes beachten, wenn ich die für mich fehlplatzierte Funktion, einer Zahl ein Minus vorzuhängen (sollte extra Taste sein), von der Aktion entfernen will?

    2. Die Komma-Taste ist so wie sie implementiert ist, mit vielen Fehlern behaftet: Wenn man beim Programmstart auf Komma drückt, kommt statt der 0 ein Komma (könnte man ja auch anhängen), mit einem Komma an sich gehts ja noch, aber man kann ja soviele setzen wie man will, da kann auch "......" stehen (was zu Fehlern während des Betriebs führt, ne Resettaste gibts ja auch nicht).

    3. (Wie) Kann ich realisieren wie beim Windows-Rechner, dass wenn ich z.B. 5 PLUS 5 rechne und dann nochmal auf PLUS drücke, dass einfach wieder 5 addiert wird? Dasselbe natürlich mit -, * und /.

    *Ich weiß natürlich, dass das Tut einen einfachen Rechner mit Grundfunktionen darstellt, aber wenn ich lerne, will ich ja auch fehlerfrei lernen, sonst bedenke ich solche wichtigen Sachen später auch nicht/kann sie nicht lösen.

    Danke schonmal :-)

  • #2
    Hi.

    Zitat von JavaKaffe Beitrag anzeigen
    1. muss ich was besonderes beachten, wenn ich die für mich fehlplatzierte Funktion, einer Zahl ein Minus vorzuhängen (sollte extra Taste sein), von der Aktion entfernen will?
    Nein, du kannst diese Funktion einer eigenen Taste zuordnen.

    Zitat von JavaKaffe Beitrag anzeigen
    2. Die Komma-Taste ist so wie sie implementiert ist, mit vielen Fehlern behaftet: Wenn man beim Programmstart auf Komma drückt, kommt statt der 0 ein Komma (könnte man ja auch anhängen), mit einem Komma an sich gehts ja noch, aber man kann ja soviele setzen wie man will, da kann auch "......" stehen (was zu Fehlern während des Betriebs führt, ne Resettaste gibts ja auch nicht).
    Der Taschenrechner ist bewußt simpel gehalten. Es ist mit dem im Tutorial vermittelten Grundlagen problemlos möglich eine Reset-Taste hinzuzufügen.

    Auch lässt sich leicht einbauen, dass das Koma nur einmal eingefügt werden darf.

    Zitat von JavaKaffe Beitrag anzeigen
    3. (Wie) Kann ich realisieren wie beim Windows-Rechner, dass wenn ich z.B. 5 PLUS 5 rechne und dann nochmal auf PLUS drücke, dass einfach wieder 5 addiert wird? Dasselbe natürlich mit -, * und /.
    Ich verstehe nicht was du damit aussagen willst. Der Java Taschenrechner verhält sich diesbezüglich genau wie der Windows Taschenrechner.

    Zitat von JavaKaffe Beitrag anzeigen
    Ich weiß natürlich, dass das Tut einen einfachen Rechner mit Grundfunktionen darstellt, aber wenn ich lerne, will ich ja auch fehlerfrei lernen, sonst bedenke ich solche wichtigen Sachen später auch nicht/kann sie nicht lösen.
    Um es vorweg zu nehmen. Komplexe Ausdrücke, wie z.B. Klammerung usw. werden mit sogenannten arithmetischen Bäumen erstellt. Parser nutzen Bäume um das zu realisieren.

    In dem Artikel wurde darauf verzichtet, weil der Taschenrechner sonst viel komplizierter geworden wäre.

    Kommentar


    • #3
      Zu 1. Danke :-)

      Zu 2. Dass es vorsätzlich einfach gehaltn wurde hab ich ja am Ende auch angemerkt. Ich weiß leider jetzt noch nicht genau, wo ich dass denn machen müsste mit der Kommabeschränkung (habs da versucht, wo die Berechnungen der Tasten stattfinden, indem ich indexOf benutzt habe um nach einem Komma zu suchen um es dann nicht mehr zu benutzen, aber reagiert hat das Programm dann nicht).

      Eine Resettaste krieg ich wohl noch hin, war ja auch nur eine ANmerkung, dass es die nicht gibt, um einen Fehler wie ein doppelkomma mal eben zu revidieren (ist eine RÜCKtaste eigentlich kompliziert? Dass also eine Zahl etc. wieder gelöscht wird? Bsp.: 45 (Rücktaste) => 4)

      Zu 3. Stimmt.^^ Weiß auch nich wo das herkam. Hatte ich aber schonmal iwo. Ähm... aber das mit der Gleichtaste geht beim Windows-Rechner. Drücke ich 10 +10 und dann =, dann kommt 20 raus, drücke ich nochmal = kommt 30 raus usw.

      Zuletzt, danke für deine Erklärungen

      Kommentar


      • #4
        Hallo JavaKaffe,

        du kannst das mit dem komma in Klasse InsertAction prüfen. Schaue einfach im String nach, ob sich darin schon ein Punkt verbirgt, bevor du den Text setzt.
        Code:
         __    __   ______   ______   ______   __  __   __   __ ______   ______   
        /\ "-./  \ /\  __ \ /\  ___\ /\  ___\ /\ \_\ \ /\ \ / //\  ___\ /\  == \  
        \ \ \-./\ \\ \  __ \\ \ \____\ \ \__ \\ \____ \\ \ \'/ \ \  __\ \ \  __<  
         \ \_\ \ \_\\ \_\ \_\\ \_____\\ \_____\\/\_____\\ \__|  \ \_____\\ \_\ \_\
          \/_/  \/_/ \/_/\/_/ \/_____/ \/_____/ \/_____/ \/_/    \/_____/ \/_/ /_/

        Kommentar


        • #5
          danke Laurent. Habe das jetzt so gelöst:

          Code:
          if (input.equals(".") && (display.getText()).indexOf(".") != -1) {
                          display.setText(display.getText());
                      } else {
                          display.setText(display.getText() + input);
                      }
          zu umständlich? oder gut?

          Kommentar


          • #6
            Hallo JavaKaffe,

            kann man im prinzip stehen lassen. allerdings brauchst du die erste Klausel nicht. Es reicht das hier:

            Code:
            if (!(input.equals(".") && display.getText().contains("."))) {
                display.setText(display.getText() + input);
            }
            Code:
             __    __   ______   ______   ______   __  __   __   __ ______   ______   
            /\ "-./  \ /\  __ \ /\  ___\ /\  ___\ /\ \_\ \ /\ \ / //\  ___\ /\  == \  
            \ \ \-./\ \\ \  __ \\ \ \____\ \ \__ \\ \____ \\ \ \'/ \ \  __\ \ \  __<  
             \ \_\ \ \_\\ \_\ \_\\ \_____\\ \_____\\/\_____\\ \__|  \ \_____\\ \_\ \_\
              \/_/  \/_/ \/_/\/_/ \/_____/ \/_____/ \/_____/ \/_/    \/_____/ \/_/ /_/

            Kommentar


            • #7
              stimmt hast Recht. :-)

              Ich hab jetzt noch versucht eine */- -Taste einzubauen.

              Dafür habe ich im command-Bereich versucht zu prüfen, ob ein "-" im String steht. Falls das der Fall ist, sollte statt einem Minus wieder Nichts dort stehen. Ist kein Minus vorhanden wird folglich ein Minus geschrieben. Irgendwie glaube ich, dass ich eine Zahl mit einem Minus davor grad gar nicht berücksichtigt habe^^ egal, hier der Code^^

              Code:
              if (command.equals("+/-")) {
                                  if ((display.getText()).indexOf("-") != -1) {
                                      display.setText("");
                                      start = false;
                                  } else {
                                      display.setText("-");
                                      start = false;
                                  }
                              } else {
                                  lastCommand = command;
                              }
              P.S.: Bemerk grad was. Ähm... warum das Ausrufezeichen bei der abgeänderten Version meines Codes grad? Ohne das und die Klammern um die Zustände geht gar nichts mehr im Rechner, setze ich die Klammern und das AUsrufezeichen aber, dann gehts. Wieso? Was ändert sich?

              Kommentar


              • #8
                Diese funktion kannst du auch in der inneren Klasse IsertAction einbauen.

                So in der Art...

                PHP-Code:
                private class InsertAction implements ActionListener
                {
                    @
                Override
                    
                public void actionPerformed(ActionEvent event)
                    {
                        
                String input event.getActionCommand();
                        if (
                start_) {
                            
                display_.setText("");
                            
                start_ false;
                        } 

                        if (
                input.equals("+/-")) {
                            if(
                display_.getText().contains("-"))
                                
                display_.setText(display_.getText().substring(1));
                            else
                                
                display_.setText("-" display_.getText());
                        } else if(
                input.equals(".")) {
                            if (!
                display_.getText().contains("."))
                                
                display_.setText(display_.getText() + input);
                        } else {
                            
                display_.setText(display_.getText() + input);
                        }
                    }

                Code:
                 __    __   ______   ______   ______   __  __   __   __ ______   ______   
                /\ "-./  \ /\  __ \ /\  ___\ /\  ___\ /\ \_\ \ /\ \ / //\  ___\ /\  == \  
                \ \ \-./\ \\ \  __ \\ \ \____\ \ \__ \\ \____ \\ \ \'/ \ \  __\ \ \  __<  
                 \ \_\ \ \_\\ \_\ \_\\ \_____\\ \_____\\/\_____\\ \__|  \ \_____\\ \_\ \_\
                  \/_/  \/_/ \/_/\/_/ \/_____/ \/_____/ \/_____/ \/_/    \/_____/ \/_/ /_/

                Kommentar


                • #9
                  ähm... was sind das jez für Dinger mit Unterstrich? Neue Variablen etc.? Oder geht das einfach so?? Und wozu override? kenn das (noch) nich. Für ein paar kurze Erläuterungen wäre ich sehr dankbar was sowas angeht.

                  Die unterstriche hab ich jez weggemacht, dann geht das sogar alles (perfekt wies scheint).

                  Kommentar


                  • #10
                    uups

                    das sind dieselben variablen nur mit unterstrich. in Java werden Member immer mit unterstrich am Ende bezeichnet, damit man sie schnell von normalen variablen unterscheiden kann..
                    Code:
                     __    __   ______   ______   ______   __  __   __   __ ______   ______   
                    /\ "-./  \ /\  __ \ /\  ___\ /\  ___\ /\ \_\ \ /\ \ / //\  ___\ /\  == \  
                    \ \ \-./\ \\ \  __ \\ \ \____\ \ \__ \\ \____ \\ \ \'/ \ \  __\ \ \  __<  
                     \ \_\ \ \_\\ \_\ \_\\ \_____\\ \_____\\/\_____\\ \__|  \ \_____\\ \_\ \_\
                      \/_/  \/_/ \/_/\/_/ \/_____/ \/_____/ \/_____/ \/_/    \/_____/ \/_/ /_/

                    Kommentar


                    • #11
                      Trotzdem mal gucken.

                      http://ais.informatik.uni-freiburg.d...12_grammar.pdf

                      Stichwort: Grammatik, Parser, Arithmetische Bäume



                      http://www.ke.tu-darmstadt.de/lehre/...gen/propro.pdf

                      So funktionieren alle Parser und natürlich auch die richtig guten Taschenrechner mit denen man alles rechnen kann.

                      Kommentar

                      Lädt...
                      X