从FOR循环中提取返回值

3

我正在实现一个方法,其返回值在for循环中定义。然而,我总是收到eclipse告诉我必须对其进行初始化的提示。但是如果我这样做,并将其设置为null,它始终保持为null...我做错了什么?

public String getPoints(String team){
    String teamName;
    String outcome;
    for ( FootballClub club : league )
    {
        teamName = club.getName();
        if ( teamName.trim().toLowerCase().equals( team ) )
        {
            outcome = ( team + "  " + club.getPoints() ) + " Points";
        }
    }
    return outcome;
} 

3
已经有一个答案了,但你可以在循环内部使用return (team+" " +club.getPoints())+ " Points";并在方法末尾使用return null;,也许需要将String teamName移动到循环内。这样做的好处是:1)如果已经找到比赛结果,您会立即退出for循环,而不必检查所有其他俱乐部;2)您不需要一个名为outcome的变量。 - Niklas R
1
只有在满足某些条件(正确的队名)时,您才会设置“outcome” - 可能您的集合中没有该队名的俱乐部。 - Andy
1
但如果我这样做,并将其设置为null,它始终保持为null...这可能是因为您的团队与联赛对象不匹配。将结果初始化为null并集中注意力放在for循环逻辑上。 - janasainik
4个回答

1

使用此方法,可以消除多余的变量,当然如果不再对outcome进行其他操作的话:

public String getPoints(String team){
    String teamName;
    for ( FootballClub club : league )
    {
        teamName = club.getName();
        if ( teamName.trim().toLowerCase().equals( team ) )
        {
            return ( team + "  " + club.getPoints() ) + " Points";
        }
    }
    return "null or some string if .equals( team ) false for all clubs";
} 

2
最好在结尾处返回null,或者抛出异常。虽然我更喜欢返回null。 ;) - Niklas R

1
作为局部变量,它们没有默认初始值。在使用之前必须显式初始化,这就是为什么你的无辜的Eclipse会告诉你编译错误的原因。
将outcome初始化为null,它不总是null,如果您调用getPoints()的团队存在于联赛收藏中,则您的结果肯定会改变。
public String getPoints(String team){
    String teamName;
    String outcome=null; // Initialization is must
    for ( FootballClub club : league )
    {
        teamName = club.getName();
        if ( teamName.trim().toLowerCase().equals( team ) )
        {
            outcome = ( team + "  " + club.getPoints() ) + " Points";
        }
    }
    return outcome;
} 

1

由于您正在迭代的league集合/数组(无论是什么)可能为空,因此在这种情况下永远不会进入循环体,因此outcome可能未初始化。

只需给它一个初始值:

String outcome = null;

0

你也可以使用 break

if ( teamName.trim().toLowerCase().equals( team ) )
{
     outcome = ( team + "  " + club.getPoints() ) + " Points";          
     break;
} 

当你期望返回outcome值时,你需要这样做: if (outcome != null)

也许你认为在阅读你的答案时,其他答案已经被阅读了,但是为了完整起见,你介意添加一句话吗?即“outcome”必须首先用“null”进行初始化。 - Niklas R
当定义为:String outcome;时,它意味着outcome = null - roeygol
1
正如@NeerajJain所指出的那样,本地变量不会被赋予默认初始值。因此,__不要__,你应该初始化outcome - Niklas R

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接