这是我为我的作业写的第一个java程序,我遇到了帐户注册重复的问题。我的想法是addStudent方法检查输入的ID是否已经存在于文本文件中,然后将新帐户写入文本文件。但事实证明,即使ID已经存在,它仍然将新的学生帐户写入文本文件。
以下是单击注册按钮时的代码。
try {
Student st = new Student();
st.setCategory("Student");
st.setStudID(studentID.getText());
st.setName(name.getText());
st.setEmail(email.getText());
st.setPhone(phone.getText());
st.setDegreeLevel(Integer.parseInt(level.getText()));
String outcome = new StudentAccessor().addStudent(st);
if (outcome.equalsIgnoreCase("done")) {
JOptionPane.showMessageDialog(this, "Student Added Successfully");
} else if (outcome.equalsIgnoreCase("undone")) {
JOptionPane.showMessageDialog(this, "Failed to register, Student already exists.");
}
} catch (IOException ex) {
JOptionPane.showMessageDialog(this, ex.getMessage());
}下面是它调用的方法:
public String addStudent(Student student) throws IOException {
String feedback = null;
PrintWriter pw = null;
for (int i = 0; i < allStudents.size(); i++) {
Student a = allStudents.get(i);
if (student.getStudID().equals(a.getStudID())) {
feedback = "undone";
} else{
String entry = student.getStudID() + "," + student.getName() +
"," + student.getEmail() + "," + student.getDegreeLevel() +
"," + student.getPhone() + "," +
student.getCategory();
pw = new PrintWriter(new FileWriter("Student.txt",true));
pw.println(entry);
pw.close();
feedback = "done";
}
}
return feedback;
}发布于 2019-07-28 18:54:32
你的方法应该是这样的:
public String addStudent(Student student) throws IOException {
String feedback = null;
PrintWriter pw = null;
for (int i = 0; i < allStudents.size(); i++) {
Student a = allStudents.get(i);
if (student.getStudID().equals(a.getStudID())) {
feedback = "undone";
break;
}
}
if(feedback == null) {
String entry = student.getStudID() + "," + student.getName() +
"," + student.getEmail() + "," + student.getDegreeLevel() +
"," + student.getPhone() + "," +
student.getCategory();
pw = new PrintWriter(new FileWriter("Student.txt",true));
pw.println(entry);
pw.close();
feedback = "done";
}
return feedback;
}你需要比较所有的学生。那么只有你才能知道id是否存在。你现在所做的,一旦id与任何学生都不匹配,你就会添加那个学生。
假设,一个学生的id与您发送给方法的id相同。但它在列表的第二个索引中。现在,您尝试过的方法会将id与第一个学生进行比较,但不会发现相等。然后,它会将学生添加到数据结构中。
霍普,你做到了。:)
发布于 2019-07-28 19:04:19
您需要稍微重构一下代码:只有当ID不在已知的学生ID列表中时,才应该添加一个学生。所以你可以先迭代所有现有的学生。
如果对所有学生的迭代都已完成(没有返回),则可以假定ID不在已知学生的列表中,并且
使用当前代码,您可以遍历现有学生的列表。
发布于 2019-07-28 21:25:07
public String addStudent(Student student) throws IOException {
if (allStudents.contains(student.getStudID())) {
return "undone";
}
StringBuilder sb = new StringBuilder();
sb.append(student.getStudID()).append(",")
.append(student.getName()).append(",")
.append(student.getEmail()).append(",")
.append(student.getDegreeLevel()).append(",")
.append(student.getPhone()).append(",")
.append(student.getCategory());
try (PrintWriter pw = new PrintWriter(new FileWriter("Student.txt", true))) {
pw.println(sb.toString());
}
return "done";
}https://stackoverflow.com/questions/57240075
复制相似问题