以下控制器中的布尔值有什么作用?

What does the boolean in the follwong controller do?

我正在学习 Java fx 的初学者课程,我的任务是使用基于 MVC 模式的 Scene Builder 创建一个简单的袖珍计算器。我了解模型和视图,但我不了解以下控制器中布尔值 isTypingNumber 的用途。 我的老师说这应该用于检查用户是否正在输入数字,以便他在此期间无法执行任何其他操作,但我不明白他的意思或在这种情况下应该意味着什么。也许有人可以在这里给我一个解释。

最好的问候~

控制器:

package application;

import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.text.Text;

public class Controller {
        
        @FXML
        Text resultLabel;
        boolean isTypingNumber = false; 
        double firstNumber = 0;
        double secondNumber = 0;
        String operation = "";
        Model model = new Model();
        
        public void numberTapped(ActionEvent event) { //When user tapps on a number
            String value = ((Button)event.getSource()).getText(); 
            
            if (isTypingNumber) { 
                resultLabel.setText(resultLabel.getText() + value);
            } else {
                resultLabel.setText(value);
                isTypingNumber = true;
            }
            
        }
        
        public void calculationTapped(ActionEvent event) { //When User clicks a + / -  / * or /
            isTypingNumber = false;
            firstNumber = Double.parseDouble(resultLabel.getText());
            operation = ((Button) event.getSource()).getText();
            
        }
        
        public void equalsTapped(ActionEvent event) { // When click on =
            isTypingNumber = false;
            secondNumber = Double.parseDouble(resultLabel.getText());
            double result = model.calculate(firstNumber, secondNumber, operation);
            resultLabel.setText(String.valueOf(result));
            
        }
        
        public void restartTapped(ActionEvent event ){ //When click on "C"
            resultLabel.setText("0");
            firstNumber = 0;
            secondNumber = 0;
            
        }
}

为了更好地理解这里的模型:

package application;

public class Model {
    
    public double calculate(double number1, double number2, String operation) {
    
        switch (operation) {
        case "+":
            return number1 + number2;
        case "-":
            return number1 - number2;
        case "*":
            return number1 * number2;
        case "/":
            if(number2 == 0) {
                System.out.println("Durch 0 teilen geht nicht");
            }
            
            else {
                return number1/number2;
            }
            
            
            
        
        }
        
        return 0;
        
        
    }
}


布尔值isTypingNumber用于决定用户输入的数字是附加到resultLabel中的文本还是替换resultLabel中的文本。

假设用户想要计算“22 + 33”:

  1. 用户按下“2”。 isTypingNumber 为 false,因此 resultLabel 中的文本将替换为“2”并且 isTypingNumber 设置为 true
  2. 用户再次按下“2”。 isTypingNumber 为真,因此数字附加到 resultLabel 中现在包含“22”的文本。
  3. 用户按下“+”。这个存储在operationfirstNumber改为22,isTypingNumber设置为false
  4. 用户按下“3”。 resultLabel 中的文本应该通过附加“3”更改为“223”还是应该通过替换内容更改为“3”? isTypingNumber 回答了这个问题:它是假的,所以 resultLabel 中的文本将被替换为“3”。

正是在第 4 步中,isTypingNumber 的需求变得显而易见。

如果您在步骤 3 中将 resultLabel 中的文本更改为空字符串,则可能会删除 isTypingNumber,但恕我直言,这会使用户界面变得尴尬:只要您按下一个操作按钮,您之前输入的数字将消失。这意味着如果用户尝试进行多次计算(“22 + 33 =”,“3 * 15 =”),他将需要在中间按下重新启动按钮。