2016-10-04 1 views
0

Итак, я занимаюсь тематическим проектом Star Trek, где мне нужно взять список членов экипажа и планет, которые они посетили, и создать отчет журнала для Starfleet.Как получить доступ и изменить элементы массива int в карте деревьев

К примеру этого ...

Guinan,Drema IV 
Picard,Gamalon V 
Barclay,Valo III 
Riker,Theydat IV 
Pulaski,Alpha Moon 
Troi,Tessen III 
... 

должен стать этот

Acamar III: 
    B. Crusher    11 
    Barclay     6 
    Data     15 
    Gomez     3 
    Guinan     4 
    Lefler     5 
    O'Brien    12 
    Ogawa     4 
    Picard     5 
    Pulaski    14 
    Riker     12 
    Troi     9 
    W. Crusher    4 
    Worf     14 
    Yar      3 
... 

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

Мой вопрос, так как я очень новое Java, как бы я получить значение из элемента массива внутри карты дерева и обновляет значение внутри данного элемента массива? Моя проблема заключается в том, что все примеры, которые я могу найти о работе с Tree Map, не включают в себя массивы внутри них или don't show how to get a value and update values after the first insertion. Ниже я дал свой текущий psuedocode с моим лучшим предположением о том, как это сделать. Если кто-то знает способ сделать это, или лучший метод, пожалуйста, предложите его.

P.S. Я собираюсь реализовать цикл Мне нужно после Я могу получить отдельную итерацию, написанную правильно

EDIT: Для ясности каждый элемент массива int 15 элементов соответствует члену экипажа, так что, например, Data будет array[2] и Яра будет array[14]

import java.util.*; 
public class TreeMapDemo { 

    public static void main(String args[]) { 
     // Create a hash map 
     TreeMap tm = new TreeMap(); 
     int indexDesired; 
     int visits; 
     String planetNameVariable; 
     String crewMemberName; 

     //Scan input using Scanner and assign planet name and crew name to 
     //correct variables (code provided by instructor) 

     // Put elements to the map 
     //if(planet doesn't already exist in tm) 
      tm.put(planetNameVariable, new int[14]); 

     //Decides which element of the array must be incremented 
     indexDesired = crewToIndex(crewMemberName); 

     //Increments visit count of crewMemberName on planetNameVariable 
     visits = //How do I get the value of the array associated with planetNameVariable at indexDesired? 
     tm.put(planetNameVariable, int[indexDesired] = visits + 1 //How do I insert into an array element here?); 

     // Get an iterator 
     Iterator i = set.iterator(); 

     // Display element 
     // Code not designed yet 

    } 
} 

ответ

1

Вы можете что-то вроде этого. Здесь вы должны поместить массив на карту только один раз, потому что после этого вы получите только ссылку, поэтому, если вы измените его, оно будет также изменено на карте. [Мелкая копия]

int visits[] = null; 
    // Increments visit count of crewMemberName on planetNameVariable 
    visits = tm.get(planetNameVariable); 
    if (visits == null) { 
     tm.put(planetNameVariable, new int[14]); 
     visits = tm.get(planetNameVariable); 
    } 
    visits[indexDesired]++; 

    // Get an iterator 
    Iterator<String> iterator = tm.keySet().iterator(); 
    while (iterator.hasNext()) { 
     String key = iterator.next(); 
     int[] temp = tm.get(key); 
     if (temp != null) { 
      for (int i = 0; i < temp.length; i++) { 
       System.out.println(key + " " + temp[i]); 
      } 
     } 
    } 
Смежные вопросы