Dziwne - odejmuje liczby, ale je dodaje

2015-02-07 23:18
0

Witam.
Jestem w trakcie pisania kalkulatora na przyciskach w Javie. Napisałem funkcję, która dodaje, odejmuje. Dodawanie działa dobrze lecz odejmowanie już nie.

public static int roznica(int a, int b)
{
    return a-b;
}

Dlaczego powyższy kod mi dodaje dwie liczby do siebie, zamiast odejmować? Gdy dam + do odejmuje.. dziwne..

Z góry dziękuje za pomoc.

dodanie znacznika <code class="java"> - @furious programming


Cenie ludzi za szczerość a nie za szczere intencje..
edytowany 1x, ostatnio: furious programming, 2015-02-08 02:56

Pozostało 580 znaków

2015-02-07 23:22
1

Czy nie próbujesz przypadkiem przekazać liczby ujemnej jako drugiego argumentu?
Na 100% powstrzymuje Cie elementarna matematyka.

Przykład w rubim obrazujący problem:

a = 2
b = -2
print a-b
edytowany 2x, ostatnio: spartanPAGE, 2015-02-07 23:24
nie, nie mogę wpisać tak by liczba a lub b była ujemną, natomiast wynik może być ujemny - Guepardo 2015-02-07 23:25
Potrzeba więcej kodu i przykład użycia. - spartanPAGE 2015-02-07 23:26

Pozostało 580 znaków

2015-02-07 23:28
0

przycisk -


        btn_odejmowanie.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent arg0)
            {
                zmienne.a = Integer.parseInt(wyswietl.getText());
                wyswietl.setText("-");
                zmienne.odejmowanie = true;
                zmienne.dodawanie = false;
                zmienne.mnozenie = false;
                zmienne.dzielenie = false;
            }
         });

przycisk =


        btn_wynik.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent arg0)
            {
                zmienne.ab=0;

                 if (zmienne.dodawanie)
                  {
                    zmienne.b = Integer.parseInt(wyswietl.getText());
                    zmienne.ab = suma(zmienne.a, zmienne.b);
                  }

                 else if (zmienne.odejmowanie)
                  {
                    zmienne.b = Integer.parseInt(wyswietl.getText());
                    zmienne.ab = roznica(zmienne.a, zmienne.b);
                  }

                 else if (zmienne.mnozenie)
                  {
                    zmienne.b = Integer.parseInt(wyswietl.getText());
                    zmienne.ab = iloczyn(zmienne.a, zmienne.b);
                  }
                  else if (zmienne.dzielenie)
                  {
                    zmienne.b = Integer.parseInt(wyswietl.getText());
                    zmienne.ab = iloraz(zmienne.a, zmienne.b);
                  }

                 wyswietl.setText(Integer.toString(zmienne.ab));

                    }
                 });

Cenie ludzi za szczerość a nie za szczere intencje..
edytowany 1x, ostatnio: bogdans, 2015-02-08 01:20
wydaje się być mega przekombinowane - spartanPAGE 2015-02-07 23:32
uczę się dopiero Javy. Kalkulator ma być moim projektem :) Javy uczyłem się może dopiero 3 godziny - Guepardo 2015-02-07 23:37
!Wstawiaj kod w znaczniki &lt;code=java&gt;&lt;/code&gt; - bogdans 2015-02-08 01:21

Pozostało 580 znaków

2015-02-08 01:26
0

Powyższy kod to dziwactwo, nadaje się tylko na podpałkę. Po trzech godzinach nauki nie napisał byś tak głupiego kodu.
Błąd jest w metodach suma i roznica. Dużo rozsądniej byłoby napisać:

                 if (zmienne.dodawanie)
                  {
                    zmienne.b = Integer.parseInt(wyswietl.getText());
                    zmienne.ab = zmienne.a + zmienne.b;
                  }

oraz obsłużyć błąd parsowania.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
nadaje się tylko na podpałkę to i tak nieźle ;p - karolinaa 2015-02-11 23:01

Pozostało 580 znaków

2015-02-08 13:05
0

Już wiem na czym polegał błąd.
Gdy wciskałem przycisk - pojawiał się on w okienku w którym wyświetlany jest wynik. Następnie zapisywałem do zmiennej to co jest w tym oknie. Później była konwersja z string na int i liczba b była ujemna. Dlatego tak się działo :)


Cenie ludzi za szczerość a nie za szczere intencje..

Pozostało 580 znaków

2015-02-08 14:18
0
zmienne.a = Float.parseFloat(wyswietl.getText());
zmienne.ab = Math.sqrt(zmienne.a);

Dlaczego mi to nie działa? Wyrzuca błąd: incompatible types: possible lossy conversion from double to float

`dodanie znacznika ``` - @furious programming


Cenie ludzi za szczerość a nie za szczere intencje..
edytowany 2x, ostatnio: furious programming, 2015-02-08 17:22

Pozostało 580 znaków

2015-02-08 16:29
0

Math.sqrt zwraca typ double. Zmień typy zmiennych na double i parsuj tak:

zmienna.a = Double.parseDouble(wyswietl.getText());

Przy okazji, dlaczego pole tekstowe do wprowadzania liczby nazywa się wyswietl? Masz tylko jedno pole tekstowe w programie, i użytkownik wprowadza kolejno: pierwszą liczbę, potem drugą i nie widzi wtedy pierwszej, na końcu widzi wynik ale nie widzi liczb?


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
edytowany 1x, ostatnio: bogdans, 2015-02-08 16:33
tak sobie nazwałem :) Nie wiem jak zrobić by użytkownik widział cały wynik, bo podczas konwersji cuda sie działy "-" mi konwertowało i druga liczba była ujemna po czym zamiast dodawać odejmowało :D - Guepardo 2015-02-08 19:32

Pozostało 580 znaków

2015-02-08 21:25
0

Procenty

  btn_procent.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent arg0)
            {
                zmienne.b = Integer.parseInt(wyswietl.getText());
                zmienne.ab = zmienne.a * (zmienne.b/100);
                wyswietl.setText(Integer.toString(zmienne.ab));
            }
         });

Co tu mam źle ze zawsze wychodzi 0?


Cenie ludzi za szczerość a nie za szczere intencje..

Pozostało 580 znaków

2015-02-08 21:52
0
zmienne.ab = zmienne.a * (zmienne.b/100.0);

/ to dzielenie całkowite, wynik dzielenia liczb typu int jest również typu int.


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
czyli muszę zmienić tylko typ wyniku tak? - Guepardo 2015-02-08 21:56
nie, napisałem w poście co masz zrobić - bogdans 2015-02-08 22:16
wiem, już mi działa :) - Guepardo 2015-02-09 14:43

Pozostało 580 znaków

2015-02-09 14:46
0

Mam jeszcze jedno pytanko. Dlaczego jak wyliczę pierwiastek jakiejś liczby a potem kliknę na znak działania (+ - * /) to wyrzuca błąd?


btn_pierwiastek.addActionListener(new ActionListener()
        {
            public void actionPerformed(ActionEvent arg0)
            {
                zmienne.a = Integer.parseInt(wyswietl.getText());
                wyswietl.setText(Double.toString(Math.sqrt(zmienne.a)));
              //  zmienne.a = Integer.parseInt(wyswietl.getText());
            }
         });

Błąd:


Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "3.1622776601683795"
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:580)
    at java.lang.Integer.parseInt(Integer.java:615)
    at kalkulator.Kalkulator$12.actionPerformed(Kalkulator.java:229)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6525)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3321)
    at java.awt.Component.processEvent(Component.java:6290)
    at java.awt.Container.processEvent(Container.java:2234)
    at java.awt.Component.dispatchEventImpl(Component.java:4881)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
    at java.awt.Container.dispatchEventImpl(Container.java:2278)
    at java.awt.Window.dispatchEventImpl(Window.java:2739)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:746)
    at java.awt.EventQueue.access$400(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:697)
    at java.awt.EventQueue$3.run(EventQueue.java:691)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:719)
    at java.awt.EventQueue$4.run(EventQueue.java:717)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:716)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Cenie ludzi za szczerość a nie za szczere intencje..

Pozostało 580 znaków

2015-02-09 15:07
1

Jaja sobie robisz?

For input string: "3.1622776601683795"

Czy string 3.1622776601683795 przypomina Ci liczbę typu int?


To smutne, że głupcy są tak pewni siebie, a ludzie mądrzy - tak pełni wątpliwości. Bertrand Russell
czyli muszę utworzyć nową zmienną typu double? czy jest inna możliwość ? - Guepardo 2015-02-09 15:59

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0