首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java中的重复注册

Java中的重复注册
EN

Stack Overflow用户
提问于 2019-07-28 18:40:29
回答 3查看 134关注 0票数 0

这是我为我的作业写的第一个java程序,我遇到了帐户注册重复的问题。我的想法是addStudent方法检查输入的ID是否已经存在于文本文件中,然后将新帐户写入文本文件。但事实证明,即使ID已经存在,它仍然将新的学生帐户写入文本文件。

以下是单击注册按钮时的代码。

代码语言:javascript
复制
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());
}

下面是它调用的方法:

代码语言:javascript
复制
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;
}
EN

回答 3

Stack Overflow用户

发布于 2019-07-28 18:54:32

你的方法应该是这样的:

代码语言:javascript
复制
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与第一个学生进行比较,但不会发现相等。然后,它会将学生添加到数据结构中。

霍普,你做到了。:)

票数 1
EN

Stack Overflow用户

发布于 2019-07-28 19:04:19

您需要稍微重构一下代码:只有当ID不在已知的学生ID列表中时,才应该添加一个学生。所以你可以先迭代所有现有的学生。

如果对所有学生的迭代都已完成(没有返回),则可以假定ID不在已知学生的列表中,并且

  • add
    • return "done"

使用当前代码,您可以遍历现有学生的列表。

  • 如果当前学生的ID与要添加的ID相同,则将反馈设置为undone
  • 如果ID不同,则添加新学生并将反馈设置为"done“-->对于列表中ID与要添加的ID不同的每个学生,将创建一个条目。
票数 0
EN

Stack Overflow用户

发布于 2019-07-28 21:25:07

代码语言:javascript
复制
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";
}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57240075

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档