所以我遇到了Hashmaps和登录功能的问题。
使用addLogin时我需要输入参数,但这样做是没有意义的,因为我已经在构造函数类中完成了这个。我如何只使用addLogin并将姓氏,姓名和个人ID号添加到hashmap?
在使用Math.round(Math.random()* 999 + 1)生成1-999之间的随机数时,我应该如何将其与其他学生详细信息一起添加到hashmap中?
以下是适用于这两个问题的完整代码,对于我刚接触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);
}
}
答案 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)
说实话,我认为应该有一些修改你的代码的工作(抱歉不能直接回答你的两个问题,但是不可能):
Student
类:按索引检索字段比较困难,风险是添加两次相同字段或错过添加一个字段。TestApplication
类管理整个学生集及其登录,因此Student实例变量也是无意义的作为具有单个学生领域的构造函数。您应该创建一个addStudent
方法,将学生字段作为参数或更好的学生实例。"" + " "
。 结果,回答你的问题:
addLogin
方法,如果是,则可以保留所有信息,但您可以使用学生对象(或当前为学生建模的收藏品)作为参数。Application.put(personId,Student)
。请查看此answe r以获取更多信息