在Java中,如何检查用户是否输入了其他号码:
我在做一个科学计算器,遇到了一个问题 计算器的某些功能只需要1个数字(如:sin、log等) 还有一些需要2个数字(如:+,-等) 我想检查用户是否在文本字段中输入了另一个数字,因此它将执行需要另一个数字的代码块,或者它将转到不需要另一个数字的函数。 这是我的控制器类(我使用的是JavaFX):在Java中,如何检查用户是否输入了其他号码:,java,javafx,Java,Javafx,我在做一个科学计算器,遇到了一个问题 计算器的某些功能只需要1个数字(如:sin、log等) 还有一些需要2个数字(如:+,-等) 我想检查用户是否在文本字段中输入了另一个数字,因此它将执行需要另一个数字的代码块,或者它将转到不需要另一个数字的函数。 这是我的控制器类(我使用的是JavaFX): 导入javafx.event.ActionEvent; 导入javafx.fxml.Initializable; 导入javafx.fxml.fxml; 导入javafx.scene.control.B
导入javafx.event.ActionEvent;
导入javafx.fxml.Initializable;
导入javafx.fxml.fxml;
导入javafx.scene.control.Button;
导入javafx.scene.control.TextField;
导入java.net.URL;
导入java.util.ResourceBundle;
公共类计算器\u控制器实现可初始化{
私有字符串操作;
私人双流号码;
@FXML
私有TextField displayField=新TextField();
@凌驾
公共void初始化(URL、ResourceBundle资源){
//待办事项
}
@FXML
公共无效handleOperator(ActionEvent事件){
double newNumber=newdouble(displayField.getText());
开关(电流操作){
格“+”:
currentNumber+=新编号;
打破
案例“-”:
currentNumber-=新编号;
打破
案例“÷”:
currentNumber/=newNumber;
打破
案例“×”:
currentNumber*=新编号;
打破
案例“xⁿ":
currentNumber=Math.pow(currentNumber,newNumber);
打破
违约:
打破
}
开关(电流操作){
案例“AC”:
displayField.setText(“”);
打破
案例“n!”:
currentNumber=阶乘(currentNumber);
打破
格“±”:
currentNumber*=-1;
打破
案例”√":
currentNumber=Math.sqrt(currentNumber);
打破
“罪”一案:
currentNumber=Math.sin(currentNumber);
打破
案例“cos”:
currentNumber=Math.cos(currentNumber);
打破
案例“tan”:
currentNumber=Math.tan(currentNumber);
打破
案例“x²”:
currentNumber=数学功率(currentNumber,2);
打破
案例“10\uF006”:
currentNumber=数学功率(10,currentNumber);
打破
案例“日志”:
currentNumber=数学日志10(currentNumber);
打破
违约:
打破
}
displayField.setText(“+currentNumber”);
}
@FXML
公共无效操作(ActionEvent事件){
currentNumber=new Double(displayField.getText());
displayField.setText(“”);
currentOperation=((按钮)event.getSource()).getText();
}
公共双阶乘(双n){
如果(n我会试试这个:
@FXML
public void handleOperator(ActionEvent event) {
double newNumber = new Double(displayField.getText());
switch (currentOperation) {
case "+":
currentNumber += newNumber;
break;
case "-":
currentNumber -= newNumber;
break;
case "÷":
currentNumber /= newNumber;
break;
case "×":
currentNumber *= newNumber;
break;
case "xⁿ":
currentNumber = Math.pow(currentNumber, newNumber);
break;
default:
break;
}
displayField.setText("" + currentNumber);
}
@FXML
public void handleOperation(ActionEvent event) {
currentNumber = new Double(displayField.getText());
displayField.setText("");
currentOperation = ((Button) event.getSource()).getText();
switch (currentoperation) {
case "AC":
displayField.setText("");
break;
case "n!":
currentNumber = factorial(currentNumber);
break;
case "±":
currentNumber *= -1;
break;
case "√":
currentNumber = Math.sqrt(currentNumber);
break;
case "sin":
currentNumber = Math.sin(currentNumber);
break;
case "cos":
currentNumber = Math.cos(currentNumber);
break;
case "tan":
currentNumber = Math.tan(currentNumber);
break;
case "x²":
currentNumber = Math.pow(currentNumber, 2);
break;
case "10\uF006":
currentNumber = Math.pow(10, currentNumber);
break;
case "log":
currentNumber = Math.log10(currentNumber);
break;
default:
break;
}
displayField.setText("" + currentNumber);
}
如您所见,我已将第二个开关
移动到方法,该方法处理操作,因此当您使用一元操作时,它将立即执行
编辑(说明)
当您将使用一个操作数(一元数)进行计算的第二个开关移动到处理运算符的方法时,当您按下运算符时,它将计算结果。当另一个运算符(二进制,如+、-、*、/、%等)时按下时,开关将不会计算任何内容,因为这种类型的运算符不存在。二进制运算符是在您的方法中计算的,您编写的方法有问题
注意:未测试我会尝试以下方法:
@FXML
public void handleOperator(ActionEvent event) {
double newNumber = new Double(displayField.getText());
switch (currentOperation) {
case "+":
currentNumber += newNumber;
break;
case "-":
currentNumber -= newNumber;
break;
case "÷":
currentNumber /= newNumber;
break;
case "×":
currentNumber *= newNumber;
break;
case "xⁿ":
currentNumber = Math.pow(currentNumber, newNumber);
break;
default:
break;
}
displayField.setText("" + currentNumber);
}
@FXML
public void handleOperation(ActionEvent event) {
currentNumber = new Double(displayField.getText());
displayField.setText("");
currentOperation = ((Button) event.getSource()).getText();
switch (currentoperation) {
case "AC":
displayField.setText("");
break;
case "n!":
currentNumber = factorial(currentNumber);
break;
case "±":
currentNumber *= -1;
break;
case "√":
currentNumber = Math.sqrt(currentNumber);
break;
case "sin":
currentNumber = Math.sin(currentNumber);
break;
case "cos":
currentNumber = Math.cos(currentNumber);
break;
case "tan":
currentNumber = Math.tan(currentNumber);
break;
case "x²":
currentNumber = Math.pow(currentNumber, 2);
break;
case "10\uF006":
currentNumber = Math.pow(10, currentNumber);
break;
case "log":
currentNumber = Math.log10(currentNumber);
break;
default:
break;
}
displayField.setText("" + currentNumber);
}
如您所见,我已将第二个开关
移动到方法,该方法处理操作,因此当您使用一元操作时,它将立即执行
编辑(说明)
当您将使用一个操作数(一元数)进行计算的第二个开关移动到处理运算符的方法时,当您按下运算符时,它将计算结果。当另一个运算符(二进制,如+、-、*、/、%等)时按下时,开关将不会计算任何内容,因为这种类型的运算符不存在。二进制运算符是在您的方法中计算的,您编写的方法有问题
注意:未测试Huh?@FXML private TextField displayField=new TextField();
如果fxmloader
应该分配字段的值,为什么要创建一个TextField
,可能是错误地分配了字段的值?Huh?@FXML private TextField displayField=new TextField();
如果FXMLLoader
应该分配字段的值,为什么要创建TextField
le newNumber=new Double(displayField.getText());
很好,一个改进是newNumber=newNumber*10+pressedKey;
您必须在哪里获得pressedKey
。您必须决定是从键盘按键还是用按钮按键。因此您的解决方案更好;)。很抱歉我的误解@blazekickOK,让我给你看一个例子:你已经输入了1234
数字,现在你想按5
得到12345
数字。所以计算将是1234*10+5=12345
。注意10
是你使用的数字系统的基础。如果你使用二进制,它就是将是2
而不是10