【问题标题】:Won't return object不会返回对象
【发布时间】:2021-05-28 14:09:10
【问题描述】:
private ArrayList players =  new ArrayList<Player>();

public Player getPlayerByName(String theName){
     for(int i = 0; i < players.size(); i++){
        String pName =  (String) players.get(i);
        if(pName.equals(theName)){
            return (Player) players.get(i);
    } else{
        return null;
    }
 }

以上是我的代码。所以,错误来自这个方法,说它必须返回一个 Player 类型,但我在搜索匹配的字符串后这样做了。你怎么做这个工作?如果这个问题已经得到解答,我深表歉意。

【问题讨论】:

  • 如果 player.size == 0. 这是您当前的问题,则该场景没有返回声明。从 else 和 for 中取出 return null,并将其放在循环之后
  • 还要注意,如果代码一致缩进,错误会更清楚。如果您使用的是 IDE,它应该能够为您缩进代码。
  • 谢谢@Stultuske!数组中充满了来自不同文件的信息,我可以在调试器上看到所有信息。我确实取出了退货,我很抱歉这是一个愚蠢的错误。
  • @JonSkeetjob 所以缩进是我试图在这里获取代码......它在实际文件上的格式很好我昨晚非常疲惫,想在前往之前提出这个问题床。

标签: java object arraylist iteration


【解决方案1】:

预设的代码有几个问题:

  1. 列表players应该包含Player对象,但是在循环中列表的元素在比较之前被转换为String,然后相同的元素被转换为Player
  2. 只检查列表中的第一个元素,如果不匹配,则返回null

代码应该是这样固定的:

private List<Player> players =  new ArrayList<>();

public Player getPlayerByName(String theName) {
    for (Player player : players) {
        String pName = player.getName();
        if (pName.equals(theName)) {
            return player;
        }
    }
    return null;
}

这个任务可能值得使用 Java Stream:

public Player getPlayerByName(String theName) {
    return players.stream()  // Stream<Player>
        .filter(p -> p.getName().equals(theName)) // keep matched by name
        .findFirst() // pick the first match
        .orElse(null); // provide null if no match is found
}

【讨论】:

  • 嗨,亚历克斯!非常感谢你的帮助。我确实尝试将它放入代码中并运行它,但我遇到的问题是你编写的方式是 for 循环中的播放器错误指出它无法将对象转换为播放器。
  • 我知道我做错了什么!你真的很棒!抱歉!
【解决方案2】:

由于您的 return 语句在 for 循环内,因此您必须在函数末尾有一个 return 语句。

因为当 return 语句在条件语句(或循环)内时,有可能条件为 false,程序可能永远无法到达 return 语句。

【讨论】:

  • 非常感谢!是的,我把它排除在外了……这是我的一个愚蠢的错误!
猜你喜欢
  • 2018-08-11
  • 2011-02-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-18
相关资源
最近更新 更多