以下控制器中的布尔值是做什么的



我正在学习Java fx的初学者课程,我的任务是使用基于MVC模式的场景生成器创建一个简单的袖珍计算器。我理解模型和视图,但我不理解以下控制器中布尔值isTypeingNumber的用途。我的老师说,这应该用来检查用户是否输入了一个数字,这样他就不能在这段时间内执行任何其他操作,但我不明白他的意思,也不明白在这种情况下应该是什么意思。也许有人可以在这里给我一个解释。

最诚挚的问候~

控制器:

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中的文本将被替换为"false";2〃;并且CCD_ 6被设置为真
  2. 用户按下";2〃;再一次isTypingNumber为真,因此数字被附加到resultLabel中的文本,该文本现在包含"0";22〃
  3. 用户按下"+&";。这存储在operation中,firstNumber更改为22,isTypingNumber设置为false
  4. 用户按下";3〃;。如果CCD_ 12中的文本被改变为";223〃;通过将";3〃;或者应该将其改为";3〃;通过替换内容?isTypingNumber回答了这个问题:它是假的,所以resultLabel中的文本将被替换为"3〃

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

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

最新更新