【问题标题】:Adding elements to an hashmap向哈希图中添加元素
【发布时间】:2013-12-21 14:25:15
【问题描述】:

所以我对 Hashmaps 和登录功能有疑问。

  1. 使用 addLogin 时,我需要输入参数,但这样做没有意义,因为我已经在构造函数类中完成了此操作。我将如何简单地使用 addLogin 并将姓氏、名字和个人 ID 号添加到哈希图中?

  2. 使用 Math.round(Math.random()*999+1) 生成 1-999 之间的随机数后,我应该如何将其与其他学生详细信息一起添加到哈希图中?

这是适用于这两个问题的完整代码,对于我对 Java 非常陌生的愚蠢问题表示歉意!我非常感谢我收到的任何帮助。提前致谢。

public class TestApplication
{
// hashmap
private HashMap<String, ArrayList <String>> Application = new HashMap<String, ArrayList <String>>();
// hashset
private HashSet<String> loginsIssued = new HashSet<String>();
// An Arry List for storing student information 
private ArrayList<String> Student = new ArrayList<String>();

/**
 * Constructor for objects of class Application
 */
public TestApplication(String Surname, String personalIdNo)
{
    if (isValidpersonalIdNo(personalIdNo) == true)
    {
        Student.add(Surname);
        Application.put(personalIdNo, Student);
        System.out.println("Application number ### " +  "has registered successfully");
    }
    else
    {
        System.out.println("Application has failed, Personal id: " + personalIdNo);
    }
}

/**
 * Create a Student Information
 */
public void TestApplication(String personalIdNo, String Surname, String Forename)
{
    Student.add(Surname);
    Student.add(Forename);
    Student.add (personalIdNo);
}

/** 
 * Add Login
 * Pull First Letter of Forenames
 * Pull First Letter of Surname
 * Generate Random Number
 * Print
 */
public void addLogin(String Surname, String Forename)
{
    String login = "";
    {
        System.out.println (Surname.charAt(0) + "" + " " + Forename.charAt(0) + " " + Math.round(Math.random()*999+1));
        Student.add(login);
        loginsIssued.add(login);

    }
}

/** 
 * CONDITION 1
 * Check whether the ID supplied is only numbers
 */
public boolean isNumeric(String personalIdNo)  
{  
    if (personalIdNo.matches("((-|\\+)?[0-9]+(\\.[0-9]+)?)+")) {   
        return true;
    } 
    else 
    {  
        return false;
    }  
}

/** 
 * CONDITION 2
 * Check whether the ID supplied has a length of 10
 */
public boolean checkLength(String personalIdNo)
{
    if (String.valueOf(personalIdNo).length()==10) 
    {
        return true;
    }
    else
    {
        return false;
    }
}

/** 
 * CONDITION 3
 * Check whether the ID supplied starts with 1
 */
public boolean checkFirstDigit(String personalIdNo)
{
    if (personalIdNo.startsWith("1"))
    {
        return true;
    }
    else
    {
        return false;
    }
}

/** 
 * Validation Check - Check if it satisfies all conditions. 
 */
public boolean isValidpersonalIdNo(String personalIdNo)
{
    if (isNumeric(personalIdNo) &&  checkLength(personalIdNo) && checkFirstDigit(personalIdNo))
    {
        return true;
    }
    else
    { 
        return false;
    }
}

/** 
 * FORENAME
 * Add Forename
 */
public void addForename(String Forename)
{
    Student.add(Forename);  
}

/** 
 * Return Surname
 */
public String getSurname()
{
    return Student.get(0);
}

}

【问题讨论】:

  • 与您的问题无关,但给方法取同名而不是给类取同名是个坏主意。(public void TestApplication)。你可以认为它是一个构造函数。
  • 对于 1,您必须输入哪些您认为不必要的参数?
  • 你到底想达到什么目的?你的程序到底应该做什么?除了关于 1 的问题,我还有关于 2 的问题:你打算如何处理你生成的号码?你只是暂时显示它。你想用它来创建个人ID吗?
  • 基本上 addLogin 不带参数,取每个名字的第一个字符和 student 中包含的姓氏的第一个字符,并添加一个 1 到 999 范围内的随机数以形成一个登录名,然后添加为学生收藏的最终条目。记录保存在进一步集合中创建的所有此类登录,可从任何应用程序对象访问,称为 loginsIssued。然后使用它来确保分配的每个登录名都是唯一的。
  • 关于您的代码的另一个说明:您的变量和方法名称应始终以小写字母开头。这并不重要,但它使事情变得更加清晰。此外,我不会使用 ArrayList 来表示学生,而是使用姓氏、名字...作为字段来创建特定的班级。

标签: java hashmap


【解决方案1】:

关于你的第一个问题 在初始化时,我猜你只是想给字符串一个值,通常你可以通过编写来实现 字符串登录=空; 但我很安静,不确定你想用空的“”实现什么

而且我不明白为什么在将登录名添加到数组列表之前不给它一个值,或者默认情况下应该是这个登录名 public void addLogin(String Surname, String Forename)

String login = null;
{
    System.out.println (Surname.charAt(0) + "" + " " +         Forename.charAt(0) + " " +        Math.round(Math.random()*999+1));
    Student.add(login);
    loginsIssued.add(login);

}

作为提示,如果您在均衡方法中返回布尔值,则不需要检查 if 子句 if true == true,因为 if 子句会检查您是否按照自己的方式执行 true ==true 并返回 true if像这样你明白我的意思吗?如果您不这样做两次,您将节省资源:) 因此,只需编写在 if 大括号中返回布尔值的方法。 希望能帮到你
如果您需要更多信息,请发表评论

【讨论】:

    【解决方案2】:

    说实话,我认为应该进行一些返工来修复您的代码(很抱歉没有直接回答您的两个问题,但目前是不可能的):

    1. 修复第二个构造函数,它被声明为方法
    2. 创建Student 类:按索引检索字段更难,风险是添加两次相同的字段或错过添加一个字段。
    3. 除非我不完全理解您的代码应该实现什么,否则主要问题是设计错误:您的 TestApplication 类管理整个学生集及其登录,因此 Student 实例变量是无稽之谈以及具有单个学生字段的构造函数。您应该创建一个 addStudent 方法,将学生字段作为参数,或者更好地创建一个 Student 实例。
    4. 我也不明白"" + " " 的用法。

    因此,回答您的问题:

    1. 您可以保留 addLogin 方法,如果是这样,是的,您必须保留所有信息,但您可以使用 Student 对象(或当前对学生建模时的 Collection)作为参数。
    2. 如果您更新同一个学生(同一个对象实例),它当然会在您的地图中更新。如果没有(您使用 Student 的副本),则只需执行 Application.put(personId,Student)。看看这个answer 以获取更多信息

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-12
      • 2015-04-30
      • 2020-11-17
      • 2015-12-03
      • 1970-01-01
      • 2013-11-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多