java - 为什么我的第二个 while 循环没有执行?

标签 java while-loop

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();
        }
    }

关于java - 为什么我的第二个 while 循环没有执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29193107/

相关文章:

java - JSON 响应被分成多行的原因可能是什么?

java - 非最终类可以完全不可变吗?

java - Apache 的 FileHandler 保存 unicode 转义符而不是特殊字符

java - 检查号码是否是唯一号码

java - 如何从 OpenAPI 3.0 yaml 文件生成 JSON 示例?

Java 无限循环

c++ - 有条件地返回到函数的开头

java - TTS 中读取 "Strings"的编号

python - 如何在pygame中使 Sprite 在窗口边缘反弹

c - While 循环不能与 fgetc 一起使用