2015-01-26 52 views
-3

所以在这种方法中,while循环的条件是我选择删除行代码并创建一个方法,在需要时调用。但是,这第一种方法不起作用,并导致应用程序无声锁定。为什么这个方法调用工作,但不是在编写代码?

def getLineRows(rows, index) { 
    def lineRows = [rows[index]] 
    def newOperator 
    def i = index + 1 
    if (index <= (rows.size() - 1)) { 
     newOperator = false 

这是有问题的代码。

 while (index <= (rows.size() - 1) && !newOperator) { 
      if (rows[index].PGM_PROC_OPE.trim() == "" || 
       (rows[index].PGM_PROC_TY == "OR" || 
        rows[index].PGM_PROC_TY == "AN")) { 
       lineRows << rows[i] 
      } else { 
       newOperator = true 
      } 
      i++ 
     } 
    } 
    return lineRows 
} 

在这第二个和视觉上相同的方法中,我简单地创建了一个名为moreRows(rows,index)的方法。还有两个方法调用,但是他们已经通过测试从考虑中消除。

def moreRows(rows, index) { 
    return index <= (rows.size() - 1) 
} 

什么会导致低于该代码才能正常工作时moreRows被使用,而不是由上述的方法中,其中moreRows为线?

def getLineRows(rows, index) { 
    def lineRows = [rows[index]] 
    def newOperator 
    def i = index + 1 
    if (moreRows(rows, i)) { 
     newOperator = false 
     while (moreRows(rows, i) && !newOperator) { 
      if (operatorEmpty(rows, i) || isSpecialProcType(rows, i)) { 
       lineRows << rows[i] 
      } else { 
       newOperator = true 
      } 
      i++ 
     } 
    } 
    return lineRows 
} 

回答

2

您定义i和循环增量,但在你的while声明中不使用它

while (index <= (rows.size() - 1) && !newOperator) { 

所以你进入无限循环在这里。

+0

谢谢,就是这样。当我将代码从方法切换到内联时,我没有注意到我需要与i进行比较而不是索引。谢谢! – kschmit90 2015-01-26 20:24:18

相关问题