首页 > 解决方案 > 对象的二分搜索返回什么?

问题描述

public Song searchSongByName (String name) {
  // ADD YOUR CODE HERE
  int low = 0;
  int high = items.length - 1;
  String foundName = "";
  while ( low <= high ) {
    int mid = (high + low) / 2;
    if ( items[mid].getName().compareTo(name) == 0) {
      foundName+= name;;
    } else {

      if ( items[mid].getName().compareTo(name) == -1 ) {
        low = mid;
      } else {
        high = mid;
      }
    }
  }

}

这是我正在处理的一个项目,基本上,“items”是歌曲的对象数组,我需要搜索数组以查找参数中给出的歌曲。我的第一个想法是只返回我创建的字符串“ foundName”,但这没有成功。然后我想到了 return -1(如果没有找到)和 0(如果找到),但返回类型是 Song。那么我可以返回什么来让用户知道他们的歌曲被找到了?

标签: java

解决方案


我认为物品是这样的

Song[] items = ...

所以如果找到你应该返回这个

// instead of line // foundName+= name;;
return items[mid];

null如果没有找到,则在 while 循环之后返回。

但是,如果您可以更改方法的返回类型,则应该返回Optional

// instead of line // foundName+= name;;
return Optional.of(items[mid]);

在这种情况下返回Optional.empty(),如果没有找到。


推荐阅读