2012-12-05 34 views
-1

我的代码:意外的输出

Object tempDifference; 
Object testUser; 
testUser = users.get(0); 
it8 = difference_time.iterator(); 
it9 = users.iterator(); 
Object tempUser; 
tempDifference = difference_time.get(0); 

while (it9.hasNext()) { 
    tempUser = it9.next(); 
    System.out.println(testUser+" "+tempUser); 
    if (testUser.equals(tempUser)) { 
    times.add(tempDifference); 
    testUser = tempUser; 
    } else { 
    times.add(value); 
    testUser = tempUser; 
    } 
    tempDifference = it8.next(); 
} 
  • 输入是:1 2 2

  • 输出是:1 1

  • 我想输出1 2

为什么开始时输出不好1 1

+0

AAAH,好老的功课:) – evilone

+4

请使用英文单词,而在SO发布您的代码。很难区分变量名称。并请张贴所有相关的代码。您尚未发布您正在使用的清单的声明和初始化。 –

+0

该代码看起来很糟糕。请清理它并添加缺少的部分。 – Uli

回答

1

大多数迭代器在第一个元素开始之前,所以第一次调用next()会将它们移动到第一个元素,而不是第二个元素。

所以,如果用户= {1,2},煮沸下来有点:

//set test = 1, the first entry in the list 
test = users.get(0); 
//get a new iterator, starting before the first element 
it9 = users.iterator(); 
// move to first element (the next one), so temp == 1 
temp = it9.next(); 
// print values "1 1" 
System.out.println(test+" "+temp); 
+0

我可以做些什么来使它不会如此? – Majkl

+1

这就是它们的工作方式......你可以在创建它之后立即调用它9.next(),它会将它移动到第一个条目,然后在你的循环中下一个调用next(),返回第二个条目在列表中。 – femtoRgon