迭代器中的 hasnext() 未按预期工作

hasnext() in iterator is not working as expected

我在使用 hasNext() 迭代器方法时遇到困难。我有一个 JSONArray:

JSONArray = [{"a":1},{"b":2,"c":3}]

我一次访问一个 JSONObject。第一个 JSONObjectJSONarray 中有一个元素,第二个有两个元素。问题是,当迭代器在第一个 JSONObject 上检查 hasNext() 时有一个元素给出 true,我的理解是只有当它有比当前元素更多的元素时它才应该给出 true。请帮忙澄清一下。

for (int i=0; i<JArrayLength; i++) {

            JSONObject obj = newJArray.getJSONObject(i);

            Iterator k = obj.keys();
            System.out.println("Value k.hasnext is = " + k.hasNext());
            if(k.hasNext())
            { //print somehting} // here its printing but as the value should be false it should not for i=0.
}

请指出我哪里出错了。

hasNext 检查迭代器是否有任何要迭代的值以实际获取您应该执行的值:

if(k.hasNext()){
      k.next(); // gets the actual value
}

hasNext() Returns true if the iteration has more elements.

next() Returns the next element in the iteration.

你打开迭代器

Iterator k = obj.keys();

然后立即查看是否有钥匙。由于您还没有使用第一个密钥 (a),所以它当然会被使用。

另请注意,您会收到有关使用原始类型的警告 Iterator。注意它们并适当地参数化(可能使用 <String>)。