0

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

公共类atmMachine:

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

公共自动取款机:

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(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");
            }
        }
}
4

2 回答 2

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]);
}
于 2013-07-26T05:47:08.750 回答
0

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

String pin;

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

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

这回答了你的问题了吗?

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

喜欢:

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

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

于 2013-07-26T05:25:44.680 回答