2013-12-04 2 views
0

Так что у меня есть проблема с Hashmaps и функцией входа.Добавление элементов в hashmap

  1. При использовании addLogin я обязан задать параметры, но это не имеет никакого смысла, чтобы сделать это, так как я уже делал это в классах конструктора. Как я просто просто использовать addLogin, а фамилия, имя и персональный идентификационный номер добавляются в hashmap?

  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); 
} 

}

+2

Ничего общего с вашей проблемой, но это плохая идея дать одноименное имя методу, чем классу. ('Public void TestApplication'). Вы могли бы подумать, что это конструктор. –

+1

Для 1, какие параметры вы должны положить, что вы думаете, нелепо? – hichris123

+0

Чего вы хотите достичь именно? Что должна делать ваша программа? В дополнение к вопросу о 1, у меня есть вопрос о 2: что вы намерены делать с вашим сгенерированным номером? Вы показываете его только на данный момент. Вы хотите использовать его для создания личного идентификатора? –

ответ

0

Что касается вашего первого вопроса При инициализации я думаю, вы просто хотите, чтобы дать строку значение, обычно вы этого добиться путем написания Строка входа = NULL; Но я тихо не уверен, что вы хотите достичь с пустой «»

И я не понимаю, почему вы не даете ваш Логин значение, прежде чем добавить его в ArrayList или должно быть этого Логин по умолчанию общественного недействительная addLogin (String Фамилия, String Имя, отчество)

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

} 

И точно так же, как кончик, если вы возвращаете логическое значение в ваших методах выравнивания вам не нужно, чтобы проверить в случае, если положения верно == верно, потому что если оговорка проверяет вы делаете это по-своему, верно true = true и возвращает true, если это так, вы понимаете мою точку зрения? вы сохраните ресурсы, если не делаете этого дважды :) Так что просто напишите свой метод, который возвращает логическое значение в фигурных скобках if. Я надеюсь, что я могу помочь вам
Pls комментарий, если вам нужна дополнительная информация

0

Честно говоря, я думаю, что должен быть какой-то переделки, чтобы исправить свой код (извините не отвечать непосредственно к вам два вопроса, но невозможно, так как это):

  1. Закрепить второй конструктор, который объявлен как метод
  2. Создайте Student класс: это труднее получить поля по индексу и риск для добавления в два раза и то же поле или пропустить добавление одного поле.
  3. Если я не совсем понимаю, что должен сделать ваш код, главной проблемой является ошибка дизайна: ваш класс TestApplication управляет всем набором студентов и их логином, таким образом, переменная экземпляра студента является бессмыслицей, а также конструкторами с одно поле для студентов. Вместо этого вы должны создать метод addStudent со слоями студента в качестве параметра или лучше экземпляр Student.
  4. Я также не понимаю использование "" + " ".

Следствием, чтобы ответить на ваши вопросы:

  1. Вы можете оставить свой метод addLogin и если да, то да, вы должны держать всю информацию, но вы можете использовать объект Student (или Коллекцию как вы сейчас моделируете ученика) в качестве параметра.
  2. Если вы обновите тот же экземпляр Student (тот же экземпляр объекта), он, конечно, обновится на вашей карте. Если нет (вы используете копию Студента), просто выполните Application.put(personId,Student). Посмотрите на это answe r, чтобы получить дополнительную информацию
Смежные вопросы