2016-11-08 4 views
0

ここではnoobなので、残念です。Java:ArrayListの文字列をイテレータに一致させ、同じインデックスの別のArrayListの整数を増やす

私はArrayList内の文字列を、Setsのイテレータ内の文字列の反復子と比較します。一致するものが見つかると、ArrayList内の一致する文字列のインデックスを取得し、別のArrayListの整数でその同じインデックスを増やしたいと考えています。私はそれがうまくいくような(私に)見えるものがありますが、このコードが実行された後、私の整数ArrayListは、ほとんど2,3の2,1、および0を含みます。

私のコードを最初に修正することに興味があります私はソーシャルネットワークのキーがユーザー名であるマップを持っています。その値は、ユーザーが従うユーザーのユーザー名を設定したものです。フォロワーの降順ですべてのユーザー名のリストを返す必要があります。

usernamesList ... numberOfFollowers 
theRealJoe ... 7 
javaNovice ... 3 
FakeTinaFey ... 3 

など

Map<String, Set<String>> map = new HashMap<String, Set<String>>(); 
    //edit: this map is populated. It's a parameter of the method I'm trying to write. 
    List<String> usernamesList = new ArrayList<String>(); 
    //populate usernamesList with all strings in map   

    Iterator<Set<String>> setIter = map.values().iterator(); 
    Iterator<String> strIter; 
    int strIterIndex = 0; 
    int w = 0; 
    List<Integer> numOfFollowers = new ArrayList<Integer>(); 
    //initialize all elements to 0. not sure if necessary 
    for (int i = 0; i < usernamesList.size(); i++) { 
     numOfFollowers.add(0); 
    } 

    while (setIter.hasNext()) { 

     Set<String> currentSetIter = setIter.next(); 
     strIter = currentSetIter.iterator(); 

     while (strIter.hasNext()) { 

      String currentstrIter = strIter.next(); 

      if (usernamesList.contains(currentstrIter)) { 

       strIterIndex = usernamesList.indexOf(currentstrIter); 
       numOfFollowers.set(strIterIndex, numOfFollowers.indexOf(strIterIndex) +1); 
       w++; 
       System.out.println("if statement has run " + w + " times."); 

      } else { 

       throw new RuntimeException("Should always return true. all usernames from guessFollowsGraph should be in usernamesList"); 

      } 
     } 
    } 
+0

あなたマップはので、このコードの任意の値を持っていない...、彼らは動作しませんしてください「偽」コンストラクタを修正します'while(setIter.hasNext()){'は –

+1

に実際にはキーと値を持っていません。混乱してもごめんなさい。私はマップコンストラクタを含んでいたので、あなたは私のマップが呼ばれたことを知っていました。 – ScorchConway

+0

'Map > map = HashMap >();' mapに値がありません –

答えて

0

:以下のコードでは私だけのような整数の異なるArrayListのに対応した文字列のArrayListのを(つまり、マップ内のすべてのユーザー名が含まれています)を作成しようとしています私はこの1つを除いてeveryhingが、OKに見えると思います:あなたがnumOfFollowers.indexOfを行うと、あなたがのインデックスを探している

numOfFollowers.set(strIterIndex, numOfFollowers.indexOf(strIterIndex) +1); 

n要素に値strInterIndexを設定します。

numOfFollowers.set(strIterIndex, numOfFollowers.get(strIterIndex) +1); 

私もINT [](配列)を使用してお勧めします代わりにインデックスのリスト:あなたが、欲しいのはインデックスstrIterIndexを持つ要素の(フォロワー数)です。より速く、より簡単になります。

ああ、もう一つは:代入後には「新しい」キーワードが存在しないので

関連する問題