2014-02-01 3 views
0

У меня есть два HashTables и один LinkedList того, как:Как обновить Java HashTable?

Hashtable<Character, Hashtable<String, LinkedList<String>>> hashTab = new Hashtable(); 
Hashtable<String, LinkedList<String>> string_list = new Hashtable(); 
LinkedList<String> data_list = new LinkedList(); 

Теперь у меня есть функция, через которую я передаю значения в хеш-таблицы и LinkedList

public String createPlayerAccount(String FirstName, String LastName, int Age, String Username, String Password, String IPAddress) 
{ 
    char username_first_char = Username.charAt(0); 

    try 
    { 
     boolean username_exists = hashTab.get(username_first_char).containsKey(Username); 
     if(!username_exists) 
     { 
      String data_string = FirstName + " " + LastName + " " + Age + " " + Password + " " + IPAddress + playerStatus; //Pass user details to a string 
      data_list.add(data_string); //Add user details to the linked list 
      string_list.put(Username, data_list); 
      hashTab.put(username_first_char, string_list); 
      return("Dear " + FirstName + ", You have successfully registered"); 
     } 
     else 
     { 
      return("Username already exists"); 
     } 
    } 
    catch(Exception e) 
    { 
     String data_string = FirstName + " " + LastName + " " + Age + " " + Password + " " + IPAddress +" "+ playerStatus; //Pass user details to a string 
     data_list.add(data_string); //Add user details to the linked list 
     string_list.put(Username, data_list); 
     hashTab.put(username_first_char, string_list); 
     return("Username successfully added \n "); 
    } 
} 

playerStatus устанавливается в 0 по умолчанию. Теперь я создаю еще одну функцию для Signin(), в которой я хочу, чтобы значение playerStatus обновлялось до 1. Что мне делать?

зарегистрировались():

public String playerSignIn(String Username, String Password, String IPAddress) 
{ 
    char username_first_char = Username.charAt(0); 
    try 
    { 
     String user_profile; 
     boolean username_exists = hashTab.get(username_first_char).containsKey(Username); 
     if(username_exists) 
     { 
      playerStatus = "1"; 
      //String data_string = Password + " " + IPAddress +" "+ playerStatus; //Pass user details to a string 
      //data_list.add(data_string); //Add user details to the linked list 
      //string_list.put(Username, data_list); 
      //hashTab.put(username_first_char, string_list); //Add user details to the linked list 
      //return(); 
      //hashTab.put(username_first_char, string_list); 
      //user_profile = hashTab.get(username_first_char).get(Username).get(0); 
      return(user_profile); 
      /*String data_string = Username + " " + Password + " " + IPAddress +" "+ "1"; //Pass user details to a string 
      data_list.add(data_string); //Add user details to the linked list 
      string_list.put(Username, data_list); 
      hashTab.put(username_first_char, string_list); 

      String get_user_data = hashTab.get(username_first_char).get(Username).get(0); 
      String[] user_record = get_user_data.split(" "); 
      String users_status = user_record[5];*/ 

      //return("User status updated: " + user_record[5]); 
     } 
     else 
     { 
      return("Invalid username or password"); 
     } 
    } 
    catch(Exception e) 
    { 
     return("PAWNED"); 
    } 
} 

Примечание: Это стороне сервера кода. Я создаю распределенную систему клиент-сервер.

+1

Зачем использовать 'Hashtable' вместо' HashMap' или 'ConcurrentHashMap'? –

+0

Если этот «hashTab» предназначен для какого-то ускорения: удалите его. Это не обязательно. Я также предполагаю, что вам действительно не нужен «data_list». Если вам это нужно, объясните, почему. Но самое главное: не помешайте всю эту информацию (FirstName, LastName, Age, Password, IPAddress и playerStatus) в String! Вместо этого создайте класс, обобщающий эту информацию. Тогда обновление playerStatus станет тривиальным, так или иначе – Marco13

+0

Мне нужно добавить потоки, которые не отражают итераций в реальном времени, но каким-либо образом, какими могут быть решения для этого? –

ответ

1

Как указано в комментариях, вам необходимо создать POJO (класс объекта), который будет содержать информацию об определенном проигрывателе. Я бы назвал этот класс Player. Если вам нужна строка с информацией об игроке, для отправки клиентам, просто используйте метод toString() в классе Player.

Когда я разработчик многопользовательских игр, на стороне сервера я обычно использую ConcurrentHashMap для хранения информации. Если в системе обмена сообщениями вы используете хэш-таблицу, тогда у вас будут головные боли с синхронизацией, что может стать причиной блокировки, если вы не знаете, что делаете.

Запустите рефакторинг кода. После того, как вы используете класс Player, код должен быть намного читабельнее, и вы должны знать, где может оказаться полезным другое POJO.

Смежные вопросы