2013-11-27 5 views
0

У меня возникли проблемы с тем, как создать новую упорядоченную карту, которая читает символ файла char. Вот начало моей программыИнициализация упорядоченной карты?

public class Practice { 

    public static void main(String[] args) { 
    Scanner keyboard = new Scanner(System.in); 
    System.out.print("Enter the file name to random write: "); 
    String fileName = keyboard.nextLine(); 

    System.out 
     .print("Enter nGram length, 1 is like random, 12 is like the book: "); 
    int nGramLength = keyboard.nextInt(); 
    keyboard.close(); 

    Practice rw = new Practice(fileName, nGramLength); 
    rw.printRandom(500); 
    } 

    private HashMap<String, ArrayList<Character>> all; 
    private int nGramLength; 
    private String fileName; 
    private StringBuilder theText; 
    private static Random generator; 
    private String nGram; 

    public Practice(String fileName, int nGramLength) { 
    this.fileName = fileName; 
    this.nGramLength = nGramLength; 
    generator = new Random(); 
    makeTheText(); 
    setRandomNGram(); 
    setUpMap(); // Algorithm considered during section. 
    } 

    private void makeTheText() { 
    Scanner inFile = null; 
    try { 
     inFile = new Scanner(new File(fileName)); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    theText = new StringBuilder(); 
    while (inFile.hasNextLine()) { 
     theText = theText.append(inFile.nextLine().trim()); 
     theText = theText.append(' '); 
    } 
    } 

    public void setRandomNGram() { 
    generator = new Random(); 
    int temp = theText.length() - nGramLength - 1; 
    int start = generator.nextInt(temp); 
    nGram = theText.substring(start, start + nGramLength); 
    } 

    // Read theText char by char to build a OrderedMaps where 
    // every possible nGram exists with the list of followers. 
    // This method need these three instance variables:  
    // nGramLength theText all 
    private void setUpMap() { 
    // TODO: Implement this method 
     for(int i = 0; i < nGramLength; i++) 
     { 
      ArrayList<Character> key = all.get(i); 
     } 
     } 

    // Print chars random characters. Please insert line breaks to make your 
    // output readable to the poor grader :-) 
    void printRandom(int howMany) { 
    // TODO: Implement this method 
    } 
} 

мне нужно работать на двух последних методов, но я запутался, как перебираются через HashMap

ответ

0

Ответ в том, что вы не итератора больше карта. У карт нет итератора, потому что это не имеет смысла. Что бы это сделал итератор по клавишам значений или и то, и другое. Решение превратит ваши ключи или значения в коллекцию. Вы делаете это с помощью метода values ​​(возвращает набор значений) и метода keySet (возвращает набор ключей на карте). Затем вы можете вызвать методы итератора этой коллекции.

1

Вы можете перебирать по номеру HashMap, итерируя его entrySet(). Это даст вам ключ и значение:

for (Map.Entry<String, ArrayList<Character>> entry : all) { 
    System.out.println(entry.getKey() + ": " + entry.getValue()); 
} 

В качестве альтернативы вы можете перебирать только по его keySet() или valueSet(), но это звучит так, как будто вы хотите как ключ и значение здесь.