使用迭代器时无限循环

时间:2015-04-27 07:01:10

标签: java iterator

import UIKit
import WebKit
import XWalkView

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        var start_url = "index.html"
        var xwalk_extensions = ["Extension.load"]
        if let plistPath = NSBundle.mainBundle().pathForResource("manifest", ofType: "plist") {
            if let manifest = NSDictionary(contentsOfFile: plistPath) {
                start_url = manifest["start_url"] as? String ?? start_url
                xwalk_extensions = manifest["xwalk_extensions"] as? [String] ?? xwalk_extensions
            }
        }

        let webview = WKWebView(frame: view.frame, configuration: WKWebViewConfiguration())
        webview.scrollView.bounces = false
        view.addSubview(webview)

        for name in xwalk_extensions {
            if let ext: AnyObject = XWalkExtensionFactory.createExtension(name) {
                webview.loadExtension(ext, namespace: name)
            }
        }

        if let root = NSBundle.mainBundle().resourceURL?.URLByAppendingPathComponent("www") {
            var error: NSError?
            let url = root.URLByAppendingPathComponent(start_url)
            if url.checkResourceIsReachableAndReturnError(&error) {
                webview.loadFileURL(url, allowingReadAccessToURL: root)
            } else {
                webview.loadHTMLString(error!.description, baseURL: nil)
            }
        }
    }

    override func prefersStatusBarHidden() -> Bool {
        return true
    }
}

此代码导致无限循环的可能性有多大?

实际上它会导致无限循环。我怀疑是因为我没有接受Set key1 = map.keySet(); Iterator it1 = key1.iterator(); int cnt=0; while (it1.hasNext()) { cnt++; } ,这是真的吗?

4 个答案:

答案 0 :(得分:3)

是。在你不致电it1.next()之前,它永远不会转移到下一个项目。 Beause it1.next()将返回您在list / set中添加的对象。

答案 1 :(得分:1)

问题是,您没有在循环中调用CREATE TABLE cities ( "id" bigint NOT NULL, state_id bigint NOT NULL, district_id bigint NOT NULL, "name" varchar(255) NOT NULL, description varchar(1000), created_by int NOT NULL, modified_by int, is_active char(1) NOT NULL, created timestamp, modified timestamp, PRIMARY KEY ("id") ); INSERT INTO cities(state_id, district_id, city_type, name, description, created_by, modified_by, is_active, created, modified) VALUES (1, 1, '', 'Ramtek', null, 1, null, 'Y', '2015-04-16 10:44:11', '2015-04-16 10:44:11'); ,因此it1.next()始终为真。换句话说,你永远不会移动到下一个项目。

顺便说一句,你不需要迭代器来实现你想要的东西,试试

it1.hasNext()

答案 2 :(得分:1)

  

实际上它会导致无限循环。我怀疑是因为我没有接受it1.next();,这是真的吗?

是的,这是真的。

但是,您可以更轻松地找到集合的计数:

int cnt = map.size();

答案 3 :(得分:1)

基本上,itl.hasNext()总是根据要在集合中处理的下一个值的可用性返回一个布尔值。假设指针位于某个位置x,如果位置x旁边存在某个元素,则hasNext()返回true,我的意思是存在x + 1个元素,

所以你必须使用itl.next(),它返回集合中的当前元素并将指针向前移动1.因此根据前面的例子,next()返回当前对象的位置x,并移动指针到下一个poiton。

但是要从集合中获取元素数量,您可以使用

 collection_object.size()