ホーム>source

テキストファイルから単語を読み取り、単語ごとに新しいオブジェクトを作成し、そのオブジェクトをarraylistに格納します。単語のテキストは、パラメーターとしてオブジェクトに渡されます。オブジェクトのメモリ位置ではなく単語のテキストに基づいてオブジェクトの等価性をチェックするために、単語クラスのequalsおよびhashcodeメソッドをオーバーライドしました。 arraylistにすべての一意の単語を一意のオブジェクトとして保存し、単語がテキストファイルで繰り返される場合は、単語オブジェクトの出現回数を増やします。

<前>ウィズウィズ

単語クラス

<前>ウィズウィズ

ユニークな単語がarraylistに追加されますが、カウントが増えません。カウントを増やす方法

Scanner file = new Scanner(new File(textfile)); ArrayList<Word> words=new ArrayList<Word>(); while (file.hasNext()) { Word w = new Word(fileWord); if(words.contains(w)){ w.increaseCount(); } else{ words.add(w); } } }
あなたの答え
  • 解決した方法 # 1

    問題は、コード内のこのステートメントにあります。

    <前>ウィズウィズ

    関数 while (file.hasNext()) { Word w = new Word(fileWord); if (words.contains(w)) { w.increaseCount(); // Here's what goes wrong. } else { words.add(w); } } を呼び出しています  新しく作成されたオブジェクトでは、次の反復時に置き換えられ、参照が失われます。しかし、実際のオブジェクトは increaseCount() にあります  そのオブジェクトの値を増やす必要があります。つまり、コードは次のように変更する必要があります。

    <前>ウィズウィズ

  • 解決した方法 # 2

    この答えを確認してください:

    <前>ウィズウィズ

  • 解決した方法 # 3

    問題は、ループ内でWordの新しいインスタンスを作成することです。 配列に新しく作成されたWordが含まれている場合、以前に配列に追加した既存のインスタンスではなく、その数を増やします。 問題にMapを使用することを検討してください。キーは単語で、値はカウントです。

    <前>ウィズウィズ ArrayList

  • 前へ java - JPAクエリ:サブクエリをグループ化条件に結合する
  • 次へ extjs - ExtReactテーマの組み込みに関する問題