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



我很难使用迭代器方法hasNext()。我有一个JSONArray

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

我一次访问一个JSONObjectJSONarray中的第一个JSONObject有一个元素,第二个有两个元素。问题是,当迭代器用一个元素检查hasNext()的第一个JSONObject时,它给出 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.
}

请建议我哪里出错了。

打开迭代器

Iterator k = obj.keys();

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

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

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

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

hasNext() 如果迭代具有更多元素,则返回 true。

next() 返回迭代中的下一个元素。

最新更新