我是一名试图在线课程中完成作业的noob java程序员。我特别提到这一点,因为课程材料没有以这种方式比较字符串,教授没有回复我的电子邮件。
我需要获取用户输入的用户名和密码,如果两者都正确则返回结果。我查看了Oracle's Password Fields以及此处comparing one input to one array上的类似问题,以及我谷歌搜索中出现的其他一些帮助帖子。
如果我输入第一个名字和密码,我当前的代码将返回正确,但是当我尝试第二个名称和密码时,它根本不会返回结果。即使只需要一个输入值也是正确的,它也会返回true。根据作业,我使用的是swing应用程序,所以我先发布相关代码,然后发布下面的整个内容,以避免混淆。
对我失踪的任何帮助都将不胜感激。
麻烦部分:
// get the values entered by the user
String str1 = name1.getText();
String str2 = pass1.getText();
//create my user info strings
String[] userNameArray = {
"Vale.Vicky",
"Lane.Lois",
"Kent.Clark",
"Wayne.Bruce",
"Parker.Peter",
"Rogers.Steve",
"Luther.Lex",
"Osborn.Harry",
"Prince.Diana",
"Admin"
};
String[] passwordArray = {
"BatmanFan1",
"SuperBoyFan1",
"Kryptonite1",
"Batman1",
"SpiderMan1",
"CtAmerica1",
"Letitia1",
"NewGoblin1",
"WonderWoman1",
"Password1"
};
boolean check = true;
//Test for matching user name
while (true) {
for (String i: userNameArray) {
if (str1.equals(i)) {
checked.setText("Valid Login");
check = false;
break;
}
}
//Test for matching password
for (String j: passwordArray) {
if (str2.equals(j)) {
checked.setText("Valid Login");
check = false;
break;
}
}
//return if both false
if (check) {
checked.setText("Invalid Login, Try Again");
continue;
}
break;
}
}
整个项目代码:
/**
*Rai Duffy
*Code Creation, Troubleshooting, and Validation Tests
*/
import java.awt.EventQueue;
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JPanel;
import java.awt.Color;
import java.awt.Font;
public class logInChecker {
private JFrame frmWeek;
private JTextField pass1;
private JTextField checked;
private JButton btnHelp;
private JTextField name1;
/**
* Launch the application.
*/
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
logInChecker window = new logInChecker();
window.frmWeek.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
/**
* Create the application.
*/
public logInChecker() {
initialize();
}
/**
* Initialize the contents of the frame.
*/
private void initialize() {
frmWeek = new JFrame();
frmWeek.getContentPane().setBackground(new Color(51, 204, 153));
frmWeek.setTitle("Week 5 - Interactive Assignment");
frmWeek.setBounds(100, 100, 450, 300);
frmWeek.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frmWeek.getContentPane().setLayout(null);
JLabel lblEnterYourUser = new JLabel("Enter Your User Name:");
lblEnterYourUser.setFont(new Font("Tahoma", Font.BOLD, 11));
lblEnterYourUser.setBounds(28, 36, 171, 31);
frmWeek.getContentPane().add(lblEnterYourUser);
name1 = new JTextField();
name1.setColumns(10);
name1.setBounds(28, 68, 179, 33);
frmWeek.getContentPane().add(name1);
JLabel lblEnterYourPassword = new JLabel("Enter Your Password:");
lblEnterYourPassword.setFont(new Font("Tahoma", Font.BOLD, 11));
lblEnterYourPassword.setBounds(28, 112, 179, 14);
frmWeek.getContentPane().add(lblEnterYourPassword);
pass1 = new JTextField();
pass1.setBounds(28, 137, 179, 31);
frmWeek.getContentPane().add(pass1);
pass1.setColumns(10);
JButton btnCheck = new JButton("Attempt Login");
btnCheck.setBackground(new Color(204, 102, 153));
btnCheck.setFont(new Font("Tahoma", Font.BOLD, 11));
btnCheck.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
//define what we are looking for
// get the values entered by the user
String str1 = name1.getText();
String str2 = pass1.getText();
//create my user info strings
String[] userNameArray = {
"Vale.Vicky",
"Lane.Lois",
"Kent.Clark",
"Wayne.Bruce",
"Parker.Peter",
"Rogers.Steve",
"Luther.Lex",
"Osborn.Harry",
"Prince.Diana",
"Admin"
};
String[] passwordArray = {
"BatmanFan1",
"SuperBoyFan1",
"Kryptonite1",
"Batman1",
"SpiderMan1",
"CtAmerica1",
"Letitia1",
"NewGoblin1",
"WonderWoman1",
"Password1"
};
boolean check = true;
//Test for matching user name
while (true) {
for (String i: userNameArray) {
if (str1.equals(i)) {
checked.setText("Valid Login");
check = false;
break;
}
}
//Test for matching password
for (String j: passwordArray) {
if (str2.equals(j)) {
checked.setText("Valid Login");
check = false;
break;
}
}
//return if both false
if (check) {
checked.setText("Invalid Login, Try Again");
continue;
}
break;
}
}
});
btnCheck.setBounds(238, 136, 171, 32);
frmWeek.getContentPane().add(btnCheck);
JLabel lblYesOrNo = new JLabel("Checked Result:");
lblYesOrNo.setFont(new Font("Tahoma", Font.BOLD, 11));
lblYesOrNo.setBounds(189, 194, 113, 14);
frmWeek.getContentPane().add(lblYesOrNo);
checked = new JTextField();
checked.setBounds(135, 219, 188, 31);
frmWeek.getContentPane().add(checked);
checked.setColumns(10);
}
}
答案 0 :(得分:0)
因此,根据我所看到的情况,userNameArray
和passwordArray
之间存在直接关联,这意味着n
中userNameArray
的值对应于n
passwordArray
的值
这意味着您可以将整个搜索归结为单个if
声明...
for (int index = 0; index < userNameArray.length; index++) {
if (str1.equals(userNameArray[index]) && str2.equals(passwordArray[index])) {
return true;
}
}
return false
现在,已经说过,如果你有一些普通的旧Java对象(POJO)封装了用户名和密码,然后它可以提供验证功能,那就简单多了