以下控制器中的布尔值有什么作用?
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”:
- 用户按下“2”。
isTypingNumber
为 false,因此 resultLabel
中的文本将替换为“2”并且 isTypingNumber
设置为 true
- 用户再次按下“2”。
isTypingNumber
为真,因此数字附加到 resultLabel
中现在包含“22”的文本。
- 用户按下“+”。这个存储在
operation
,firstNumber
改为22,isTypingNumber
设置为false
- 用户按下“3”。
resultLabel
中的文本应该通过附加“3”更改为“223”还是应该通过替换内容更改为“3”? isTypingNumber
回答了这个问题:它是假的,所以 resultLabel
中的文本将被替换为“3”。
正是在第 4 步中,isTypingNumber
的需求变得显而易见。
如果您在步骤 3 中将 resultLabel
中的文本更改为空字符串,则可能会删除 isTypingNumber
,但恕我直言,这会使用户界面变得尴尬:只要您按下一个操作按钮,您之前输入的数字将消失。这意味着如果用户尝试进行多次计算(“22 + 33 =”,“3 * 15 =”),他将需要在中间按下重新启动按钮。
我正在学习 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”:
- 用户按下“2”。
isTypingNumber
为 false,因此resultLabel
中的文本将替换为“2”并且isTypingNumber
设置为 true - 用户再次按下“2”。
isTypingNumber
为真,因此数字附加到resultLabel
中现在包含“22”的文本。 - 用户按下“+”。这个存储在
operation
,firstNumber
改为22,isTypingNumber
设置为false - 用户按下“3”。
resultLabel
中的文本应该通过附加“3”更改为“223”还是应该通过替换内容更改为“3”?isTypingNumber
回答了这个问题:它是假的,所以resultLabel
中的文本将被替换为“3”。
正是在第 4 步中,isTypingNumber
的需求变得显而易见。
如果您在步骤 3 中将 resultLabel
中的文本更改为空字符串,则可能会删除 isTypingNumber
,但恕我直言,这会使用户界面变得尴尬:只要您按下一个操作按钮,您之前输入的数字将消失。这意味着如果用户尝试进行多次计算(“22 + 33 =”,“3 * 15 =”),他将需要在中间按下重新启动按钮。