在Java中,如何检查用户是否输入了其他号码:

在Java中,如何检查用户是否输入了其他号码:,java,javafx,Java,Javafx,我在做一个科学计算器,遇到了一个问题 计算器的某些功能只需要1个数字(如:sin、log等) 还有一些需要2个数字(如:+,-等) 我想检查用户是否在文本字段中输入了另一个数字,因此它将执行需要另一个数字的代码块,或者它将转到不需要另一个数字的函数。 这是我的控制器类(我使用的是JavaFX): 导入javafx.event.ActionEvent; 导入javafx.fxml.Initializable; 导入javafx.fxml.fxml; 导入javafx.scene.control.B

我在做一个科学计算器,遇到了一个问题

计算器的某些功能只需要1个数字(如:sin、log等) 还有一些需要2个数字(如:+,-等)

我想检查用户是否在文本字段中输入了另一个数字,因此它将执行需要另一个数字的代码块,或者它将转到不需要另一个数字的函数。

这是我的控制器类(我使用的是JavaFX):

导入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