Kalkulator wywala złe wyniki :/

0

Witam no nie mogę znaleźć błędu, jak go rozwikłać?

package main.java.calculator;

import javafx.beans.property.SimpleStringProperty;
import javafx.beans.property.StringProperty;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.text.Text;

public class CalculatorController {

    @FXML
    Label result;

    Text output = new Text();

    String number1 = "", operator = "";

    boolean equalsClicked = false;

    public void initialize() {
        result.textProperty().bind(output.textProperty());
        output.setText("");
    }

    @FXML
    private void numberButtonAction(ActionEvent event) {
        output.setText(output.getText() + ((Button) event.getSource()).getText());
    }

    @FXML
    private void processButtonAction(ActionEvent event) {
        if (number1 == "" && output.getText() != "") {
            number1 = output.getText();

        } else if (number1 != "" && output.getText() != "" && !equalsClicked) {
            number1 = String.valueOf(CalculationModel.calculate(Integer.parseInt(number1), Integer.parseInt(output.getText()), operator));
        } else if (number1 != "" && output.getText() != "" && equalsClicked) {
            operator = ((Button) event.getSource()).getText();
            number1 = String.valueOf(CalculationModel.calculate(Integer.parseInt(number1), Integer.parseInt(output.getText()), operator));
            equalsClicked = false;
        } else if (operator != "" && output.getText() == "") {
            System.out.println("Operator has changed!");
        } else {
            output.setText("");
            return;
        }
        output.setText("");
        operator = ((Button) event.getSource()).getText();
    }


    @FXML
    private void equalsButtonAction() {
        if (number1 != "" && output.getText() != "") {
            number1 = String.valueOf(CalculationModel.calculate(Integer.parseInt(number1), Integer.parseInt(output.getText()), operator));
            equalsClicked = true;
        }
        output.setText(number1);
    }

    @FXML
    private void CButtonAction() {
        number1 = operator = "";
        output.setText("");
    }
}
package main.java.calculator;

public class CalculationModel {
    public static int calculate(int val1, int val2, String operator) {
        switch (operator) {
            case "+": {
                return val1+val2;
            }
            case "-": {
                return val1-val2;
            }
            case "x": {
                return val1*val2;
            }
            case "/": {
                if(val2!=0)
                return (int)(val1/val2);
            }
            default:
                System.out.println("error");
                return 0;
        }
    }
}

1

jak go rozwikłać?
To elementarne: opisać jaki to błąd. Co wprowadzasz i jaki resultat dostajesz, a jakiego oczekujesz.

1

Hej, w celu przeanalizowania przyczyny błędu użyj debuggera.

0

Ymmm rozkminiłem w końcu

else if (number1 != "" && output.getText() != "" && equalsClicked) {
            equalsClicked = false;

zamiast

else if (number1 != "" && output.getText() != "" && equalsClicked) {
            operator = ((Button) event.getSource()).getText();
            number1 = String.valueOf(CalculationModel.calculate(Integer.parseInt(number1), Integer.parseInt(output.getText()), operator));
            equalsClicked = false;

operator był zastały więc jak robiło się np 3x2 (tj.6) i plus 6 to wychodziło 18 bo robiło się to drugie działanie jakby przez number1 + number1 + output

8

Super, że mogliśmy pomóc.
Gumowa kaczuszka

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