【问题标题】:Java applet need some guidanceJava 小程序需要一些指导
【发布时间】:2021-01-21 10:25:42
【问题描述】:

我一直在制作一个基本的 java 小程序,它会在第一次输入时输入用户名和密码,然后让我在第二次输入时猜测用户名和密码,但它只允许用户在输入时尝试 3 次然后,如果用户未能输入正确的输入,它将变为灰色且不可编辑,到目前为止,我已经设法完成了大部分工作,除了我必须将用户限制为 3 次输入尝试的部分以及关于如何输入的部分存储输入数据。 TL;博士 我需要知道如何限制用户的尝试次数。

这是我设法制作的代码

import java.applet.Applet;           // import Applet class
import java.awt.*;              // (Abstract Windowing Toolkit)
import java.awt.event.*;
import javax.swing.*;
public class SetA extends Applet implements ActionListener
{
    int x = 0;
    // User Input
    Label lblinputuser = new Label("Input Username");
    TextField txtuserinput = new TextField(20);
    // Password Input
    Label lblinputpass = new Label("Input Password");
    TextField txtpassinput = new TextField(20);
    // User Guess
    Label lbluser = new Label("Username");
    TextField txtuser = new TextField(20);
    // Password Guess
    Label lblpass = new Label("Password");
    TextField txtpass = new TextField(20);
    // Button Confirmation
    Button btnOk = new Button("Ok");
    Button btnOk2 = new Button("Ok");

    public void init()
    {
        add(lblinputuser);
        add(txtuserinput);
        add(lblinputpass);
        add(txtpassinput);
        add(btnOk2);
        add(lbluser);
        add(txtuser);
        add(lblpass);
        add(txtpass);
        add(btnOk);

        txtuserinput.setForeground(Color.RED);
        txtuserinput.setBackground(Color.BLACK);
        txtpassinput.setForeground(Color.RED);
        txtpassinput.setBackground(Color.BLACK);
        txtuserinput.setEchoChar('*');
        txtpassinput.setEchoChar('*');
        btnOk2.addActionListener(this);
        btnOk.addActionListener(this);
    }

    public void actionPerformed(ActionEvent e)
    {
        if(e.getSource() == btnOk2)
        {
            int confirmOption = JOptionPane.showConfirmDialog(null, "Are you sure?","Message",JOptionPane.YES_NO_OPTION);
            if(confirmOption == 1)
            {
                txtuserinput.setEditable(false);
                txtpassinput.setEditable(false);
            }
        }
        if (e.getSource() == btnOk)
        {

            if(x != 3)
            {  
                
                if(txtuser.getText() != (txtuserinput.getText()) && txtpass.getText() != (txtpassinput.getText()))
                {
                    x = x++;
                    JOptionPane.showMessageDialog(null,"Error Password/Username Incorrect","Error",JOptionPane.ERROR_MESSAGE);
                }

                if(x == 3)
                {
                    JOptionPane.showMessageDialog(null,"You've run out of tries. Program Closing","Error",JOptionPane.ERROR_MESSAGE);
                    txtuser.setEditable(false);
                    txtpass.setEditable(false);
                    txtuser.setEchoChar('*');
                    txtpass.setEchoChar('*');
                }
                else
                { 
                    JOptionPane.showMessageDialog(null,"You've guessed the right input","Congratulations",JOptionPane.PLAIN_MESSAGE);
                }
            }
        }
    }
}

【问题讨论】:

  • 保留一个int counter 变量作为实例字段,出错时递增,在允许继续之前检查其值。
  • 另外,txtuser != txtuserinput this is not how you compare strings。而且您是在比较 TextFields 本身,而不是它们的内容。
  • 重播@FedericoklezCulloca 评论:使用 .getText();方法
  • 不清楚您使用的是什么版本的 Java,但小程序已从 Java 11 中删除,Java 8 应视为生命周期结束

标签: java applet


【解决方案1】:

这是需要的逻辑:

  1. 初始化一个计数器。
  2. 在 actionPerformed 中,增加计数器。
  3. 添加额外的 if-else 条件以检查计数器是否为

完成。

【讨论】:

  • 我已经更新了代码并尝试了几种方法,使其在输入错误时每次按下 Ok 都会增加计数器,但它仍然不会显示达到最大尝试次数的部分
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-13
  • 1970-01-01
  • 2020-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多