如何为 javaFX 计算器编写计算方法
How to write a calculate method for a javaFX calculator
我正在尝试借助 javaFX 编写一个计算器应用程序,但遇到了障碍。我正在尝试编写一个进行实际计算的方法,但我遇到了一些困难。我写的方法在下面的代码中。它第一次计算很好,但是当您尝试添加到计算中时,一切都出错了。我觉得我写的完全错了。任何帮助将不胜感激。
有问题的方法:
public void calculate() {
if(result != 0) {
System.out.println(finalResult);
switch (operatorPressed) {
case '+':
result = result + numberPressed;
setFinalResult(result);
System.out.println(operatorPressed);
case '-':
result = result - numberPressed;
case '*':
result = result * numberPressed;
case '/':
result = result / numberPressed;
}
}
else {
result = numberPressed;
}
}
完整的计算器引擎class:
package sample;
public class CalculatorEngine {
private double numberPressed = 0;
private double result = 0;
public double finalResult;
public char operatorPressed;
public double getFinalResult() {
return finalResult;
}
public void setFinalResult(double finalResult) {
this.finalResult = finalResult;
}
public void setNumberPressed(double number) {
numberPressed = number;
}
public void setOperatorPressed(char operator) {
operatorPressed = operator;
}
public void calculate() {
if(result != 0) {
System.out.println(finalResult);
switch (operatorPressed) {
case '+':
result = result + numberPressed;
setFinalResult(result);
System.out.println(operatorPressed);
case '-':
result = result - numberPressed;
case '*':
result = result * numberPressed;
case '/':
result = result / numberPressed;
}
}
else {
result = numberPressed;
}
}
}
完全控制器class:
package sample;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.fxml.Initializable;
import java.io.IOException;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.net.URL;
public class Controller {
@FXML
private Button btnSix;
@FXML
private Button btnEight;
@FXML
private Button btnNine;
@FXML
private Button btnDivide;
@FXML
private Button btnFour;
@FXML
private Button btnFive;
@FXML
private Button btnSeven;
@FXML
private Button btnMultiply;
@FXML
private Button btnOne;
@FXML
private Button btnTwo;
@FXML
private Button btnThree;
@FXML
private Button btnSubtract;
@FXML
private Button btnZero;
@FXML
private Button btnDecimalPoint;
@FXML
private Button btnEquals;
@FXML
private Button btnPlus;
@FXML
private Label txtCalcDisplay;
private ArrayList<String> outputList = new ArrayList<>();
private CalculatorEngine engine = new CalculatorEngine();
private String output = "";
private double finalResult;
private final int oneValue = 1;
private final int twoValue = 2;
private final int threeValue = 3;
private final int fourValue = 4;
private final int fiveValue = 5;
private final int sixValue = 6;
private final int sevenValue = 7;
private final int eightValue = 8;
private final int nineValue = 9;
private final int zeroValue = 0;
//@Override
//public void initialize(URL url, ResourceBundle resourceBundle) {
//}
public void organiseOutput()
{
for(int i = 0; i <= outputList.size()-1; i++) {
output = output.concat(outputList.get(i));
}
}
public void displayOutput()
{
if(outputList.get(outputList.size()-1).equals("=")) {
txtCalcDisplay.setText(String.valueOf(engine.getFinalResult()));
}
else if(outputList.get(outputList.size()-1).equals("-") || outputList.get(outputList.size()-1).equals("+") || outputList.get(outputList.size()-1).equals("*") || outputList.get(outputList.size()-1).equals("/")) {
txtCalcDisplay.setText("");
}
else {
//output = "";
txtCalcDisplay.setText("");
txtCalcDisplay.setText(output);
}
}
public void onOneButtonClicked(ActionEvent event) throws IOException
{
outputList.add("1");
output = String.valueOf(oneValue);
displayOutput();
engine.setNumberPressed(oneValue);
engine.calculate();
}
public void onTwoButtonClicked(ActionEvent event) throws IOException
{
outputList.add("2");
output = String.valueOf(twoValue);
displayOutput();
engine.setNumberPressed(twoValue);
}
public void onThreeButtonClicked(ActionEvent event) throws IOException
{
outputList.add("3");
output = String.valueOf(threeValue);
displayOutput();
engine.setNumberPressed(threeValue);
}
public void onFourButtonClicked(ActionEvent event) throws IOException
{
outputList.add("4");
output = String.valueOf(fourValue);
displayOutput();
engine.setNumberPressed(fourValue);
}
public void onFiveButtonClicked(ActionEvent event) throws IOException
{
outputList.add("5");
output = String.valueOf(fiveValue);
displayOutput();
engine.setNumberPressed(fiveValue);
}
public void onSixButtonClicked(ActionEvent event) throws IOException
{
outputList.add("6");
output = String.valueOf(sixValue);
displayOutput();
engine.setNumberPressed(sixValue);
}
public void onSevenButtonClicked(ActionEvent event) throws IOException
{
outputList.add("7");
output = String.valueOf(sevenValue);
displayOutput();
engine.setNumberPressed(sevenValue);
}
public void onEightButtonClicked(ActionEvent event) throws IOException
{
outputList.add("8");
output = String.valueOf(eightValue);
displayOutput();
engine.setNumberPressed(eightValue);
}
public void onNineButtonClicked(ActionEvent event) throws IOException
{
outputList.add("9");
output = String.valueOf(nineValue);
displayOutput();
engine.setNumberPressed(nineValue);
}
public void onZeroButtonClicked(ActionEvent event) throws IOException
{
outputList.add("0");
output = String.valueOf(zeroValue);
displayOutput();
engine.setNumberPressed(zeroValue);
}
public void onAddButtonClicked(ActionEvent event) throws IOException
{
outputList.add("+");
output = "+";
displayOutput();
engine.setOperatorPressed('+');
engine.calculate();
}
public void onMinusButtonClicked(ActionEvent event) throws IOException
{
outputList.add("-");
output = "-";
displayOutput();
engine.setOperatorPressed('-');
engine.calculate();
}
public void onDivideButtonClicked(ActionEvent event) throws IOException
{
outputList.add("/");
output = "/";
displayOutput();
engine.setOperatorPressed('/');
engine.calculate();
}
public void onMultiplyButtonClicked(ActionEvent event) throws IOException
{
outputList.add("*");
output = "*";
displayOutput();
engine.setOperatorPressed('*');
engine.calculate();
}
public void onDecimalButtonClicked(ActionEvent event) throws IOException
{
outputList.add(".");
output = ".";
displayOutput();
engine.setOperatorPressed('.');
engine.calculate();
}
public void onEqualsButtonClicked(ActionEvent event) throws IOException
{
outputList.add("=");
output = "=";
engine.calculate();
displayOutput();
}
}
传统的 switch 语句在任何情况下都需要 break:
。
自 java 12 以来有一个更新的语法,使用 ->
而不是 :
。
switch (operatorPressed) {
case '+' ->
result += numberPressed;
setFinalResult(result);
System.out.println(operatorPressed);
case '-' ->
result -= numberPressed;
case '*' ->
result *= numberPressed;
case '/' ->
result /= numberPressed;
}
在原始代码中,-
会变成 *
和 /
。
另一个提示:switch
也可以对字符串进行操作:switch ("...") { case "CE" -> ...
。
您需要在每个病例后 break;
。
public void calculate() {
if(result != 0) {
System.out.println(finalResult);
switch (operatorPressed) {
case '+':
result = result + numberPressed;
setFinalResult(result);
System.out.println(operatorPressed);
break;
case '-':
result = result - numberPressed;
break;
case '*':
result = result * numberPressed;
break;
case '/':
result = result / numberPressed;
break;
}
}
我正在尝试借助 javaFX 编写一个计算器应用程序,但遇到了障碍。我正在尝试编写一个进行实际计算的方法,但我遇到了一些困难。我写的方法在下面的代码中。它第一次计算很好,但是当您尝试添加到计算中时,一切都出错了。我觉得我写的完全错了。任何帮助将不胜感激。
有问题的方法:
public void calculate() {
if(result != 0) {
System.out.println(finalResult);
switch (operatorPressed) {
case '+':
result = result + numberPressed;
setFinalResult(result);
System.out.println(operatorPressed);
case '-':
result = result - numberPressed;
case '*':
result = result * numberPressed;
case '/':
result = result / numberPressed;
}
}
else {
result = numberPressed;
}
}
完整的计算器引擎class:
package sample;
public class CalculatorEngine {
private double numberPressed = 0;
private double result = 0;
public double finalResult;
public char operatorPressed;
public double getFinalResult() {
return finalResult;
}
public void setFinalResult(double finalResult) {
this.finalResult = finalResult;
}
public void setNumberPressed(double number) {
numberPressed = number;
}
public void setOperatorPressed(char operator) {
operatorPressed = operator;
}
public void calculate() {
if(result != 0) {
System.out.println(finalResult);
switch (operatorPressed) {
case '+':
result = result + numberPressed;
setFinalResult(result);
System.out.println(operatorPressed);
case '-':
result = result - numberPressed;
case '*':
result = result * numberPressed;
case '/':
result = result / numberPressed;
}
}
else {
result = numberPressed;
}
}
}
完全控制器class:
package sample;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.fxml.Initializable;
import java.io.IOException;
import java.util.ArrayList;
import java.util.ResourceBundle;
import java.net.URL;
public class Controller {
@FXML
private Button btnSix;
@FXML
private Button btnEight;
@FXML
private Button btnNine;
@FXML
private Button btnDivide;
@FXML
private Button btnFour;
@FXML
private Button btnFive;
@FXML
private Button btnSeven;
@FXML
private Button btnMultiply;
@FXML
private Button btnOne;
@FXML
private Button btnTwo;
@FXML
private Button btnThree;
@FXML
private Button btnSubtract;
@FXML
private Button btnZero;
@FXML
private Button btnDecimalPoint;
@FXML
private Button btnEquals;
@FXML
private Button btnPlus;
@FXML
private Label txtCalcDisplay;
private ArrayList<String> outputList = new ArrayList<>();
private CalculatorEngine engine = new CalculatorEngine();
private String output = "";
private double finalResult;
private final int oneValue = 1;
private final int twoValue = 2;
private final int threeValue = 3;
private final int fourValue = 4;
private final int fiveValue = 5;
private final int sixValue = 6;
private final int sevenValue = 7;
private final int eightValue = 8;
private final int nineValue = 9;
private final int zeroValue = 0;
//@Override
//public void initialize(URL url, ResourceBundle resourceBundle) {
//}
public void organiseOutput()
{
for(int i = 0; i <= outputList.size()-1; i++) {
output = output.concat(outputList.get(i));
}
}
public void displayOutput()
{
if(outputList.get(outputList.size()-1).equals("=")) {
txtCalcDisplay.setText(String.valueOf(engine.getFinalResult()));
}
else if(outputList.get(outputList.size()-1).equals("-") || outputList.get(outputList.size()-1).equals("+") || outputList.get(outputList.size()-1).equals("*") || outputList.get(outputList.size()-1).equals("/")) {
txtCalcDisplay.setText("");
}
else {
//output = "";
txtCalcDisplay.setText("");
txtCalcDisplay.setText(output);
}
}
public void onOneButtonClicked(ActionEvent event) throws IOException
{
outputList.add("1");
output = String.valueOf(oneValue);
displayOutput();
engine.setNumberPressed(oneValue);
engine.calculate();
}
public void onTwoButtonClicked(ActionEvent event) throws IOException
{
outputList.add("2");
output = String.valueOf(twoValue);
displayOutput();
engine.setNumberPressed(twoValue);
}
public void onThreeButtonClicked(ActionEvent event) throws IOException
{
outputList.add("3");
output = String.valueOf(threeValue);
displayOutput();
engine.setNumberPressed(threeValue);
}
public void onFourButtonClicked(ActionEvent event) throws IOException
{
outputList.add("4");
output = String.valueOf(fourValue);
displayOutput();
engine.setNumberPressed(fourValue);
}
public void onFiveButtonClicked(ActionEvent event) throws IOException
{
outputList.add("5");
output = String.valueOf(fiveValue);
displayOutput();
engine.setNumberPressed(fiveValue);
}
public void onSixButtonClicked(ActionEvent event) throws IOException
{
outputList.add("6");
output = String.valueOf(sixValue);
displayOutput();
engine.setNumberPressed(sixValue);
}
public void onSevenButtonClicked(ActionEvent event) throws IOException
{
outputList.add("7");
output = String.valueOf(sevenValue);
displayOutput();
engine.setNumberPressed(sevenValue);
}
public void onEightButtonClicked(ActionEvent event) throws IOException
{
outputList.add("8");
output = String.valueOf(eightValue);
displayOutput();
engine.setNumberPressed(eightValue);
}
public void onNineButtonClicked(ActionEvent event) throws IOException
{
outputList.add("9");
output = String.valueOf(nineValue);
displayOutput();
engine.setNumberPressed(nineValue);
}
public void onZeroButtonClicked(ActionEvent event) throws IOException
{
outputList.add("0");
output = String.valueOf(zeroValue);
displayOutput();
engine.setNumberPressed(zeroValue);
}
public void onAddButtonClicked(ActionEvent event) throws IOException
{
outputList.add("+");
output = "+";
displayOutput();
engine.setOperatorPressed('+');
engine.calculate();
}
public void onMinusButtonClicked(ActionEvent event) throws IOException
{
outputList.add("-");
output = "-";
displayOutput();
engine.setOperatorPressed('-');
engine.calculate();
}
public void onDivideButtonClicked(ActionEvent event) throws IOException
{
outputList.add("/");
output = "/";
displayOutput();
engine.setOperatorPressed('/');
engine.calculate();
}
public void onMultiplyButtonClicked(ActionEvent event) throws IOException
{
outputList.add("*");
output = "*";
displayOutput();
engine.setOperatorPressed('*');
engine.calculate();
}
public void onDecimalButtonClicked(ActionEvent event) throws IOException
{
outputList.add(".");
output = ".";
displayOutput();
engine.setOperatorPressed('.');
engine.calculate();
}
public void onEqualsButtonClicked(ActionEvent event) throws IOException
{
outputList.add("=");
output = "=";
engine.calculate();
displayOutput();
}
}
传统的 switch 语句在任何情况下都需要 break:
。
自 java 12 以来有一个更新的语法,使用 ->
而不是 :
。
switch (operatorPressed) {
case '+' ->
result += numberPressed;
setFinalResult(result);
System.out.println(operatorPressed);
case '-' ->
result -= numberPressed;
case '*' ->
result *= numberPressed;
case '/' ->
result /= numberPressed;
}
在原始代码中,-
会变成 *
和 /
。
另一个提示:switch
也可以对字符串进行操作:switch ("...") { case "CE" -> ...
。
您需要在每个病例后 break;
。
public void calculate() {
if(result != 0) {
System.out.println(finalResult);
switch (operatorPressed) {
case '+':
result = result + numberPressed;
setFinalResult(result);
System.out.println(operatorPressed);
break;
case '-':
result = result - numberPressed;
break;
case '*':
result = result * numberPressed;
break;
case '/':
result = result / numberPressed;
break;
}
}