java - 对象的二分搜索返回什么?
问题描述
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。那么我可以返回什么来让用户知道他们的歌曲被找到了?
解决方案
我认为物品是这样的
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()
,如果没有找到。
推荐阅读
- makefile - 有没有一种规范的方法来获取 Make 规则中的前 n 个依赖项?
- php - GAE 上的自动完成功能未从 search.php 文件加载 JSON
- php - 如何通过消息 ID 使用 PHP imap_search()
- python - NameError:名称“构建”未定义
- ios - 如何限制文本字段中的数字范围(swift4)
- python - matplotlib fill_between facecolor alpha vs edgecolor alpha?
- windows - 如何使用 powershell 在 Xen Server 虚拟机中创建/添加 iso 的 DVD 驱动器
- ios - XCode 10 beta 4 分发失败 - [错误 ITMS-90534]
- php - Laravel 的性能和数据库使用 - 不需要连接?
- ios - 尝试将 AudioKit 框架上传到 GitHub