0

ファイルを文字単位で読み取る新しい順序付きマップを作成する方法に問題があります。これが私のプログラムの始まりです

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

最後の 2 つの方法に取り組む必要がありますが、ハッシュマップを反復処理する方法について混乱しています

4

2 に答える 2

0

答えは、マップを反復処理しないことです。意味がないため、マップには反復子がありません。キー、値、またはその両方を反復処理します。解決策は、キーまたは値をコレクションに変換することです。これは、values メソッド (値のコレクションを返す) と keySet メソッド (マップ内のキーのセットを返す) で行います。その後、これらのコレクションの iterator メソッドを呼び出すことができます。

于 2013-11-27T22:52:35.907 に答える