【问题标题】:Get input from button and validate if its correct or wrong从按钮获取输入并验证其正确或错误
【发布时间】:2013-07-26 05:13:40
【问题描述】:

我正在创建一个具有 pin 功能的 ATM 机。问题是我想在用户按下按钮时从按钮获取输入并验证它是正确还是错误。当按下按钮时,它将结果存储在字符串中。然后它将用于验证其正确或错误。例如:用户 A 按下 012345。然后每个数字将被存储到另一个字符串以进行验证。然后将该字符串与引脚进行比较。

公共类 atmMachine:

int numberPinButton = 10;
String pin = "012345";
String zero, one, two, three, four, five, six, seven, eight, nine;

公共 atmMachine:

panel = new JPanel();
pinButton = new JButton[numberPinButton];
for(int i = 0; i < numberPinButton; i++) {
    pinButton[i] = new JButton("" + i);
    pinButton[i].addActionListener(this);
    panel.add(pinButton[i]);
}
enterButton = new JButton("Enter");
enterButton.addActionListener(this);
panel.add(enterBtn);
panel.setBorder(BorderFactory.createTitledBorder("Enter your pin:"));
add(panel, BorderLayout.WEST);

public void actionPerformed:

public void actionPerformed(ActionEvent event) {
        if(event.getSource() == pinButton[0]) {
            zero = "0";
        } else if(e.getSource() == pinButton[1]) {
            one = "1";
        } else if(e.getSource() == pinButton[2]) {
            two = "2";
        } else if(e.getSource() == pinButton[3]) {
            three = "3";
        } else if(e.getSource() == pinButton[4]) {
            four = "4";;
        } else if(e.getSource() == pinButton[5]) {
            five = "5";
        } else if(e.getSource() == pinButton[6]) {
            six = "6";
        } else if(e.getSource() == pinButton[7]) {
            seven = "7";
        } else if(e.getSource() == pinButton[8]) {
            eight = "8";
        } else if(e.getSource() == pinButton[9]) {
            nine = "9";
        }

        if(e.getSource() == enterBtn) {
            if(???.equals(pin)) {
                System.out.println("Correct");
            } else {
                System.out.println("Wrong");
            }
        }
}

【问题讨论】:

  • 究竟是什么“问题”??
  • 清楚地了解您希望程序执行的操作,例如:每个按钮都会在密码字符串中添加一个数字,当用户按下 OK 时,输入的数字将被验证。然后我们可以帮助解决问题。
  • @andy256 添加了这两行,但它输出空值。 字符串 abc = 零+一+二+三+四+五+六+七+八+九; System.out.print(abc);

标签: java validation input jframe jbutton


【解决方案1】:

有一个实例变量-

StringBuffer userKeyString = new StringBuffer();

在执行操作时,附加按下的任何数字按钮-

userKeyString.append(event.getActionCommand());

执行的操作,如果按下输入-

if(event.getSource() == enterBtn){

    if(pin.equals(userKeyString.toString()){

        // Correct pin

    } else {

        // Incorrect pin

    }

    userKeyString.setLength(0); // Clear the buffer for next input and validation

} else {

    userKeyString.append(event.getActionCommand());

}

您应该设置按钮的操作命令-

for(int i = 0; i < numberPinButton; i++) {
    pinButton[i] = new JButton("" + i);
    pinButton[i].setActionCommand(String.valueOf(i));
    pinButton[i].addActionListener(this);
    panel.add(pinButton[i]);
}

【讨论】:

  • 它输出:0 01 012 0123 01234 012345 012345输入错误
  • @Demon Lemon 您应该设置按钮操作命令。例如digitZeroBtn.setActionCommand("0");
  • @DemonLemon 请查看修改后的答案。
  • 仍然输出:012345Enter
  • @DemonLemon 您不应该在按下回车键时附加到 userKeyString。您应该只在按下数字时追加。请参阅编辑后的答案。
【解决方案2】:

您可以将字符串 pin 声明为如下字段:

String pin;

然后在执行的操作中附加到它(伪代码)

actionPerformed(...){
    pin += keyPressed;
    if(pin.length > 5){
        validatePin(pin);
    }
}

这能回答你的问题吗?

但老实说,我建议不要在执行的操作方法中进行验证。插入所有数字后,我会尝试验证密码。这样您可以节省一些性能,并且代码将更具可读性。性能在这里不是问题,但这是一个很好的做法,因为您可以在这里检查 pin 6 次,而不是在 actionPerformed 方法之外只检查一次。

喜欢:

for(int i = 0; i < pinLength; i++){
    waitForUserToPressButtonOrTimeout();
    appendToCurrentPin();
}
validatePin();

或者让用户在输入 PIN 码并将验证链接到该按钮后简单地按下另一个按钮。但我认为使用 String pin 字段并附加到它是您问题的答案。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-10-13
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    • 2018-07-01
    • 2015-10-20
    • 2022-01-23
    • 2015-01-25
    相关资源
    最近更新 更多