我有一个数组列表的树形图。我需要检查每个匹配元素的列表。我的代码可以工作,只是它只检查数组本身。其他阵列跟踪良好。我想我错过了一个愚蠢的错误,但是。。
ArrayList<Integer> currentArray;
ArrayList<Integer> compareArray;
//Setting user friend list
//cycle users "i"
for(int i = 1; i <= treemap.size(); i++){
currentArray = treemap.get(i);
//cycle user "k"
for(int k=1; k <= treemap.size(); k++){
//if(i!=k){ Put back in once working
compareArray = treemap.get(k);
//cylce "k"s movie list
for(int l=0; l < compareArray.size(); l++){
if(currentArray.contains(compareArray.get(l))){
if (treemap2.containsKey(i)){
ArrayList<Integer> list3 = treemap2.get(i);
list3.add(k);
treemap2.remove(i);
treemap2.put(i, list3);
}
if (!treemap2.containsKey(i)){
ArrayList<Integer> list4 = new ArrayList<Integer>();
list4.add(k);
treemap2.put(i, list4);
}
}
}
}
}
//Create string of friends
for(ArrayList<Integer> x: treemap2.values()){
str2 = Integer.toString(x.get(0));
for (int i = 1; i < x.size(); i++)
{
str2 = str2 + "," + Integer.toString(x.get(i)) ;
}
}
context.write(key, new Text(str2));
我仍然需要纠正的关键,这是很容易的,而不是在最终的程序中使用的任何方式。
我应该得到11,1,1,2,2,1,1,2,2,2,3,3,3
相反,我得到了11,1,12,1,2,2,2,3,3,3
不管怎样,先谢谢你。旁注,做下面的事情能让我得到我想要的。。。但它漏掉了最后一个数组。。。。!!
//cycle current array "i"
for(int i = 1; i < treemap.size(); i++){
currentArray = treemap.get(i);
//cycle compare array "k"
for(int k=1; k <= treemap.size(); k++){
if(i!=k){ //
compareArray = treemap.get(k);
//cylce array element in compare "l"
for(int l=0; l < compareArray.size(); l++){
if(currentArray.contains(compareArray.get(l))){
if (treemap2.containsKey(i)){
ArrayList<String> list3 = treemap2.get(i);
list3.add(k+":"+compareArray.get(l));
treemap2.remove(i);
treemap2.put(i, list3);
}
if (!treemap2.containsKey(i)){
ArrayList<String> list4 = new ArrayList<String>();
list4.add(k+":"+compareArray.get(l));
treemap2.put(i, list4);
}
}
}
}
}
}
1 2105
1 1953
1 1339
2 2105
2 1321
2 1339
3 1321
3 1544
3 1222
1条答案
按热度按时间iih3973s1#
我对你的一些变量和数据定义有点不确定,因为这两个帖子之间有些不同。但是,我创建了一个独立的java程序,它隔离了您的算法,并使用模拟数据来测试它。整个程序都在下面,非常小。
这将是我使用跟踪和调试器断点的一般方法,以便能够看到结果并在关键点检查所有变量。
你可以纠正我对数据类型的错误假设。
我希望这有帮助。