将元素添加到hashmap

时间:2013-12-04 21:39:10

标签: java hashmap

所以我遇到了Hashmaps和登录功能的问题。

  1. 使用addLogin时我需要输入参数,但这样做是没有意义的,因为我已经在构造函数类中完成了这个。我如何只使用addLogin并将姓氏,姓名和个人ID号添加到hashmap?

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

  3. 以下是适用于这两个问题的完整代码,对于我刚接触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);
    }
    

    }

2 个答案:

答案 0 :(得分:0)

关于你的第一个问题 在初始化时我猜你只想给字符串一个值,通常你可以通过写作实现这一点         String login = null; 但我很安静,不知道你想用空的“”

实现什么

我不明白为什么你在将它添加到arraylist之前不给你的登录值,或者这应该是默认登录         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子句是否为true == true,因为if子句会检查你是否按照你的方式执行trueher == true并返回true如果你知道这点吗?如果你不这样做两次,你会节省资源:) 所以只需编写你的方法,它返回if大括号中的布尔值。 我希望我能帮助你 如果您需要进一步的信息,请发表评论

答案 1 :(得分:0)

说实话,我认为应该有一些修改你的代码的工作(抱歉不能直接回答你的两个问题,但是不可能):

  1. 修复第二个构造函数,它被声明为方法
  2. 创建Student类:按索引检索字段比较困难,风险是添加两次相同字段或错过添加一个字段。
  3. 除非我不完全理解您的代码应该达到的目标,否则主要问题是设计错误:您的TestApplication类管理整个学生集及其登录,因此Student实例变量也是无意义的作为具有单个学生领域的构造函数。您应该创建一个addStudent方法,将学生字段作为参数或更好的学生实例。
  4. 我也不理解使用"" + " "
  5. 结果,回答你的问题:

    1. 您可以保留addLogin方法,如果是,则可以保留所有信息,但您可以使用学生对象(或当前为学生建模的收藏品)作为参数。
    2. 如果您更新同一个学生(同一个对象实例),它当然会在您的地图中更新。如果不是(您使用学生副本),则执行Application.put(personId,Student)。请查看此answe r以获取更多信息