0

ピン機能を備えた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");
            }
        }
}
4

2 に答える 2

1

インスタンス変数を持つ -

StringBuffer userKeyString = new StringBuffer();

アクションが実行されると、押された数字ボタンが追加されます-

userKeyString.append(event.getActionCommand());

アクションが実行された場合、Enter キーが押された場合-

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;

次に、実行されたアクションでそれに追加します(疑似コード)

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

これはあなたの質問に答えていますか?

しかし、正直に言うと、アクション実行メソッドの検証に反対することをお勧めします。すべての番号が挿入された後、ピンを検証しようとします。このようにして、パフォーマンスを少し節約でき、コードが読みやすくなります。ここではパフォーマンスは問題になりませんが、actionPerformed メソッドの外で 1 回だけピンをチェックするのではなく、ここで 6 回ピンをチェックすることをお勧めします。

お気に入り:

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

または、ユーザーが PIN コードを入力して別のボタンを押すだけで、そのボタンに検証をリンクできます。しかし、String pin フィールドを使用してそれに追加することは、あなたの質問に対する答えだと思います。

于 2013-07-26T05:25:44.680 に答える