繁体   English   中英

为什么我的第二个while循环无法执行?

[英]Why my 2nd while loop in not executing?

public void compare(ArrayList list_old, ArrayList list_new) {
        try {
            Iterator<User> iterator_old = list_old.iterator();
            Iterator<User> iterator_new = list_new.iterator();

            //Check New User Is Added
            while (iterator_new.hasNext()) {
                Log.i("Test", "inside!");
                User user_new = iterator_new.next();
                boolean NEW = true;

                while (iterator_old.hasNext() && NEW) {
                    User user_old = iterator_old.next();
                    if (user_new.getUsername().equals(user_old.getUsername())) {
                        NEW = false;
                    }
                }
                if (NEW) {
                    generateNotification(getApplicationContext(), user_new.getUsername() + " has been added.");
                }
            }
            //Check User Is Removed
            while (iterator_old.hasNext()) {
                Log.i("Test", "inside");
                User user_old = iterator_old.next();
                boolean NEW = true;

                while (iterator_new.hasNext() && NEW) {
                    User user_new = iterator_new.next();
                    if (user_old.getUsername().equals(user_new.getUsername())) {
                        NEW = false;
                    }
                }
                if (NEW) {
                    generateNotification(getApplicationContext(), user_old.getUsername() + " has been removed.");
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
  1. 在此功能中,我正在将旧列表与新列表进行比较。
  2. 第一个while循环检查是添加的任何新用户,第二个while循环检查是删除的任何用户。
  3. 当我运行此应用程序时,我的第一个while循环仅执行,而第二个while循环则不执行。
  4. 我检查了Log.i(“ Test”,“ inside!”); 我发现它不在我的第二个while循环内。

请帮忙

您需要重新初始化迭代器,

 public void compare(ArrayList list_old, ArrayList list_new) {
        try {
            Iterator<User> iterator_old;
            Iterator<User> iterator_new = list_new.iterator();

            //Check New User Is Added
            while (iterator_new.hasNext()) {
                Log.i("Test", "inside!");
                User user_new = iterator_new.next();
                boolean NEW = true;
                iterator_old = list_old.iterator();
                while (iterator_old.hasNext() && NEW) {
                    User user_old = iterator_old.next();
                    if (user_new.getUsername().equals(user_old.getUsername())) {
                        NEW = false;
                    }
                }
                if (NEW) {
                    generateNotification(getApplicationContext(), user_new.getUsername() + " has been added.");
                }
            }
            //initialize again
            iterator_old = list_old.iterator();
            //Check User Is Removed
            while (iterator_old.hasNext()) {
                Log.i("Test", "inside");
                User user_old = iterator_old.next();
                boolean NEW = true;
                 iterator_new = list_new.iterator();    
                while (iterator_new.hasNext() && NEW) {
                    User user_new = iterator_new.next();
                    if (user_old.getUsername().equals(user_new.getUsername())) {
                        NEW = false;
                    }
                }
                if (NEW) {
                    generateNotification(getApplicationContext(), user_old.getUsername() + " has been removed.");
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

您不会在任何地方重置迭代器,因此我认为该代码中的任何一个都无法正常工作。 如果您使用所有Iterable类都支持的for-each循环,则您的代码可能会工作并且可读性更高。 这将避免完全创建和重置迭代器的需要。

for (User newUser : list_new) {
    for (User oldUser : list_old) 
        // Compare
}

for (User oldUser : list_old) {
    for (User newUser : list_new) 
        // Compare
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM