2014-10-16 166 views
0

我正在尝试获取特定人员前面的患者人数。我如何从for循环返回int?它始终返回0。从for循环返回int

public int pAhead(String name) { 
     Patient p; 
     int patientsAhead = 0; 
     for(int i= 0; i < list.size(); i++) 
     { 
      p = list.get(i); //get each object from array 
      String n = p.getName(); 
      if(name.equalsIgnoreCase(n)) 
      { 
       //if name passed is equal to object getName, than get the index of that object 
       patientsAhead = list.indexOf(p); 
      } 
     } 
     return patientsAhead; 
    } 
+2

你确定0是错误的结果吗? – wvdz 2014-10-16 11:21:57

+1

你在哪里声明了'list'?因为它没有被传递到代码中的函数u posted – 4rlekin 2014-10-16 11:22:03

+0

将if语句的真实部分更改为'return i;'。 – munyul 2014-10-16 11:22:21

回答

2

首先你不需要list.indexOf(p);,因为你已经拥有了循环变量i

返回它只是做

if(name.equalsIgnoreCase(n)) { 
    return i; 
} 

注意indexOf可能导致别的东西取决于你是如何实现的equals,你正在比较人的名字。

所有的说法,请确保您的列表实际上包含一些元素。

0

如果我明白你的问题,你所要做的就是当你看到你感兴趣的号码时添加一个break语句。

所以:

public int pAhead(String name) { 
     Patient p; 
     int patientsAhead = 0; 
     for(int i= 0; i < list.size(); i++) 
     { 
      p = list.get(i); //get each object from array 
      String n = p.getName(); 
      if(name.equalsIgnoreCase(n)) 
      { 
       //if name passed is equal to object getName, than increase your counter 
       patientsAhead = i; 
       break; 
      } 
     } 
     return list.size() - patientsAhead; 
    } 
1

尝试返回i的值。它会给你与传入名称匹配的值。

public int pAhead(String name) { 

    Patient p; 
    int patientsAhead = 0; 
    for(int i= 0; i < list.size(); i++) 
    { 
     p = list.get(i); //get each object from array 
     String n = p.getName(); 
     if(name.equalsIgnoreCase(n)) 
     { 
      //if name passed is equal to object getName, than increase your counter 
      patientsAhead = i; 
     } 
    } 
    return patientsAhead; 
} 
0

这个答案假定list变量是包含前面病人的病人和你想要的号码,患者名单,是你要找的病人的指数。

如果你有Patient对象,你想查找,只是做pAhead = list.indexOf(patient)应该给你相同的结果,而不使用for循环。只要确保您检查结果是否定的,那么这意味着您要查找的患者不在列表中。

此解决方案取决于定义了Person.equal()方法。一些IDE可以为你生成它。

如果您要么没有对象,或者你不能(或不愿)改变equal()方法,可以循环就像您和return i内循环,像其他答案建议:

for (int i=0; i<=list.size(); i++) { 
    if (name.equalsIgnoreCase(list.get(i).getName())) { 
     return i; 
    } 
}