|
|
|
import javafx.event.ActionEvent;
|
|
|
|
import javafx.fxml.FXML;
|
|
|
|
import javafx.scene.control.Button;
|
|
|
|
import javafx.scene.control.TextArea;
|
|
|
|
|
|
|
|
public class CalculatorControl {
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
private TextArea display;
|
|
|
|
|
|
|
|
private double firstNumber;
|
|
|
|
private double secondNumber;
|
|
|
|
private String operation;
|
|
|
|
private boolean awaitingSecondNumber;
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
void onClearButtonClicked(ActionEvent event) {
|
|
|
|
display.clear();
|
|
|
|
firstNumber = 0;
|
|
|
|
secondNumber = 0;
|
|
|
|
operation = null;
|
|
|
|
awaitingSecondNumber = false;
|
|
|
|
}
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
void onClearEntryButtonClicked(ActionEvent event) {
|
|
|
|
display.clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
void onDeleteButtonClicked(ActionEvent event) {
|
|
|
|
String currentText = display.getText();
|
|
|
|
if (currentText != null && !currentText.isEmpty()) {
|
|
|
|
display.setText(currentText.substring(0, currentText.length() - 1));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
void onEqualsButtonClicked(ActionEvent event) {
|
|
|
|
if (awaitingSecondNumber) {
|
|
|
|
String displayText = display.getText();
|
|
|
|
String[] parts = displayText.split(" ");
|
|
|
|
try {
|
|
|
|
secondNumber = Double.parseDouble(parts[parts.length - 1]);
|
|
|
|
// 检查两个数字是否都是整数
|
|
|
|
if ((firstNumber % 1 == 0) && (secondNumber % 1 == 0)) {
|
|
|
|
int intFirstNumber = (int) firstNumber;
|
|
|
|
int intSecondNumber = (int) secondNumber;
|
|
|
|
switch (operation) {
|
|
|
|
case "+":
|
|
|
|
int result = intFirstNumber + intSecondNumber;
|
|
|
|
display.setText(String.format("%d + %d = %d", intFirstNumber, intSecondNumber, result));
|
|
|
|
break;
|
|
|
|
case "-":
|
|
|
|
result = intFirstNumber - intSecondNumber;
|
|
|
|
display.setText(String.format("%d - %d = %d", intFirstNumber, intSecondNumber, result));
|
|
|
|
break;
|
|
|
|
case "*":
|
|
|
|
result = intFirstNumber * intSecondNumber;
|
|
|
|
display.setText(String.format("%d * %d = %d", intFirstNumber, intSecondNumber, result));
|
|
|
|
break;
|
|
|
|
case "/":
|
|
|
|
if (intSecondNumber == 0) {
|
|
|
|
display.setText("Error");
|
|
|
|
} else {
|
|
|
|
result = intFirstNumber / intSecondNumber;
|
|
|
|
display.setText(String.format("%d / %d = %d", intFirstNumber, intSecondNumber, result));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case "%":
|
|
|
|
result = intFirstNumber % intSecondNumber;
|
|
|
|
display.setText(String.format("%d %% %d = %d", intFirstNumber, intSecondNumber, result));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
} else if ((firstNumber % 1 != 0) || (secondNumber % 1 != 0)) {
|
|
|
|
double doubleFirstNumber = firstNumber;
|
|
|
|
double doubleSecondNumber = secondNumber;
|
|
|
|
switch (operation) {
|
|
|
|
case "+":
|
|
|
|
double result = doubleFirstNumber + doubleSecondNumber;
|
|
|
|
display.setText(String.format("%.2f + %.2f = %.2f", doubleFirstNumber, doubleSecondNumber, result));
|
|
|
|
break;
|
|
|
|
case "-":
|
|
|
|
result = doubleFirstNumber - doubleSecondNumber;
|
|
|
|
display.setText(String.format("%.2f - %.2f = %.2f", doubleFirstNumber, doubleSecondNumber, result));
|
|
|
|
break;
|
|
|
|
case "*":
|
|
|
|
result = doubleFirstNumber * doubleSecondNumber;
|
|
|
|
display.setText(String.format("%.2f * %.2f = %.2f", doubleFirstNumber, doubleSecondNumber, result));
|
|
|
|
break;
|
|
|
|
case "/":
|
|
|
|
if (doubleSecondNumber == 0) {
|
|
|
|
display.setText("Error");
|
|
|
|
} else {
|
|
|
|
result = doubleFirstNumber / doubleSecondNumber;
|
|
|
|
display.setText(String.format("%.2f / %.2f = %.2f", doubleFirstNumber, doubleSecondNumber, result));
|
|
|
|
}
|
|
|
|
break;
|
|
|
|
case "%":
|
|
|
|
double intPart = Math.floor(doubleFirstNumber);
|
|
|
|
double remainder = doubleFirstNumber - intPart;
|
|
|
|
display.setText(String.format("%.2f %% %.2f = %.2f", doubleFirstNumber, doubleSecondNumber, remainder));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
display.setText("Non-integer input");
|
|
|
|
}
|
|
|
|
awaitingSecondNumber = false;
|
|
|
|
} catch (NumberFormatException e) {
|
|
|
|
display.setText("Error");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
void onNumberButtonClicked(ActionEvent event) {
|
|
|
|
Button button = (Button) event.getSource();
|
|
|
|
String buttonText = button.getText();
|
|
|
|
display.appendText(buttonText);
|
|
|
|
}
|
|
|
|
|
|
|
|
@FXML
|
|
|
|
void onOperationButtonClicked(ActionEvent event) {
|
|
|
|
Button button = (Button) event.getSource();
|
|
|
|
String buttonText = button.getText();
|
|
|
|
if (!awaitingSecondNumber) {
|
|
|
|
String displayText = display.getText();
|
|
|
|
String[] parts = displayText.split(" ");
|
|
|
|
try {
|
|
|
|
firstNumber = Double.parseDouble(parts[parts.length - 1]);
|
|
|
|
operation = buttonText;
|
|
|
|
awaitingSecondNumber = true;
|
|
|
|
display.appendText(" " + buttonText + " ");
|
|
|
|
} catch (NumberFormatException e) {
|
|
|
|
display.setText("Error");
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|