【问题标题】:Nested while loops in Java [closed]Java中的嵌套while循环[关闭]
【发布时间】:2013-01-30 06:01:41
【问题描述】:

我的 java 程序中有一些嵌套的 while 循环有一个大问题。根据我调试的代码,我检查了第二个 while 循环语句一次,然后永远退出循环。我不知道为什么会这样,所以我会在这里发布代码:

while (current != null) {
        if(id == current.getMovie().getId()) {
           movieExists = true;
           movie = current;
           while (checkCurrent == movie) {
              showingPointer = checkCurrent.getMovie().getLinkHead();
              while (showingPointer != null) {
                 if (cal.compareTo(showingPointer.getShowing().getShowingCalendar()) == 0) {
                    return false;
                 }
                 showingPointer = showingPointer.getNext();
              }
              checkCurrent = checkCurrent.getNext();       
           }        
        }
        current = current.getNext();
     }

【问题讨论】:

  • 为了更好的答案,请告诉我们checkCurrent和movie的定义。我认为问题出在 checkCurrent == 电影
  • checkCurrent 和movie 都是存储电影对象的链表中的节点。我做了techExchange所说的但无济于事。它仍然奇怪地跳过了 while 循环。直接从 while (checkCurrent == movie) { line 到 checkCurrent = checkCurrent.getNext();行。

标签: java loops while-loop nested-loops


【解决方案1】:

此声明

while (checkCurrent == movie) {

比较对象引用并且总是 false 。这不是比较两个实例的方法

您可能想要更改代码以比较类似的值

 while(checkCurrent.getMovie().getId() == movie.getMovie().getId()){

或者实现一个 equals() 进行比较。

更多关于Equals

【讨论】:

  • 它们是链表中的节点,这个答案仍然适用吗?
  • 是的,它会应用,它关于基本对象比较
【解决方案2】:

我猜你在执行代码时会遇到 return false 这一行。如果正在执行 return 语句,它将立即从方法中返回

【讨论】:

  • 好吧,就像我说的那样,该方法永远不会达到这一点。它尝试在那个 while 循环(第二个)中的语句,并且不再尝试它并且只是结束循环
  • 调试时,循环在哪一行中断?
【解决方案3】:

为什么是return false?这不是打破循环的正确方法。请改用break

【讨论】:

  • 我没有打破循环我正在返回 false 到另一个方法...
【解决方案4】:

您应该在 Node 类中使用Comparator 接口并覆盖其compare 方法,然后比较您的对象,而不是使用while (checkCurrent == movie)。由于== 比较对象引用,因此它不适用于您的情况。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-25
    • 1970-01-01
    相关资源
    最近更新 更多