我有一小段代码,应该根据文本文件中存储的内容检查输入的代号和密码。如果有比赛,它将开始比赛,一切都很好。但是如果没有匹配,则会弹出一个对话框,询问用户是否要再次尝试登录。
int input=0; //yes
do {
codename=JOptionPane.showInputDialog(null,"Enter Codename: ");
String password=JOptionPane.showInputDialog(null, "Enter Password: ");
for(int i=0;i<users.length;i++){
if((codename.equals(users[i].getCodeName())) && (password.equals(users[i].getPassword()))){
System.out.println("\n\nCorrect");
new Game();
} else {
System.out.println("\n\nIncorrect");
}
}
input = JOptionPane.showConfirmDialog(null, "Incorrect User name/Password\nWould you like to try again?");
} while(input==0); //run while input is yes
问题:for循环后的代码没有执行。如果我针对用户[ i ]检查变量,则for循环后的代码不会运行,但如果我检查用户[ 2 ],那么它工作正常
不确定这是否重要,但我总是收到此错误:
Exception in thread "main" java.lang.NullPointerException
at com.ramtin.Game.logOn(Game.java:505)
at com.ramtin.Game.main(Game.java:397)
即使密码和代号匹配且程序运行良好,我也能得到它。
以上代码的完整代码:
public static void logOn(){
//ASK FOR CODENAME & PASSWORD FROM TEXTFILE BEFORE GAME BEGINS
//read from text file
UserData[]users=new UserData[20];
int countU=0;
try{
BufferedReader readU = new BufferedReader(new FileReader("userdata.txt"));
String line;
while((line=readU.readLine())!=null){
String []parts=line.split("#");
String codeName = parts[0];
String password=parts[1];
// System.out.println(parts[0]);
// System.out.println(parts[1]);
users[countU]=new UserData(codeName, password);
countU++;
}
readU.close();
}
catch(FileNotFoundException e){
}
catch(IOException e){
}
//PASSWORD & CODENAME
int input=0; //yes
do{
codename=JOptionPane.showInputDialog(null,"Enter Codename: ");
String password=JOptionPane.showInputDialog(null, "Enter Password: ");
for(int i=0;i<users.length;i++){
if((codename.equals(users[i].getCodeName()))&&(password.equals(users[i].getPassword()))){
System.out.println("\n\nCorrect");
new Game();
}
else{
System.out.println("\n\nIncorrect");
}
}
input = JOptionPane.showConfirmDialog(null, "Incorrect Username/Password\nWould you like to try again?");
}
while(input==0); //run while input is yes
}
}
UserData的完整代码:
public class UserData {
private String codename;
private String password;
UserData (String codeName, String password)
{
this.codename = codeName;
this.password= password;
}
String getCodeName()
{
return codename;
}
String getPassword()
{
return password;
}
public String toString ()
{
String temp = "\nCode name: "+codename+"\nPassword: " + password;
return temp;
}
}
答案 0 :(得分:0)
不要for(int i=0;i<users.length;i++){
做for(int i=0;i<countU;i++){
countU
之后的每个数组元素都会在users[i].getCodeName()
答案 1 :(得分:0)
您可以使用ArrayList,而不是使用长度为20的数组,因为它将动态扩展:
List<UserData> users = new ArrayList<>();
然后将每个用户数据添加到列表
users.add(new UserData(codeName, password));
并以
进行迭代for(int i=0 ;i<users.size(); i++) {
这将阻止NullPointer,因为您只拥有与用户一样多的条目(并且还会根据您拥有的用户数量动态增长/缩小)。