【问题标题】:Difficulty with Collections.binarySearchCollections.binarySearch 的困难
【发布时间】:2017-04-11 15:11:14
【问题描述】:

我是 JAVA 和 Netbeans 的新手,这就是我必须做的:
用户可以在输入框中写入 CD 标题,然后通过按删除按钮将 CD 从列表中删除。如果收藏中不存在 CD,则可以在发件箱中显示一条消息来说明这一点。我必须使用Collections.binarySearch() 来执行此操作。这只是整个程序的一部分,但我已经弄清楚了其余的部分。这就是我所做的:

ArrayList <String> songs = new ArrayList();
Collections.addAll(songs, "Metric - Fantasies", "\nBeatles - Abbey Road", "\nPearl Jam - Ten", "\nDoors - Alive", "\nThe Rolling Stones - Gimme Shelter\n");
Collections.sort(songs, String.CASE_INSENSITIVE_ORDER);
Collections.binarySearch(songs,"",String.CASE_INSENSITIVE_ORDER);
String delete=songs.remove(songs.size()-1);
String out="";
    String Out = null;
        for (int i = 0; i < songs.size(); i++)
    Out=out + songs;{
        output.setText("Original Order\n**************\n" + Out+delete);

我遇到的问题是,如果我添加自己的歌曲然后按删除它可以工作,但如果我尝试删除 arraylist 中的任何歌曲它不起作用。非常感谢任何帮助,并提前感谢您!

【问题讨论】:

  • edit您的问题包含minimal reproducible example,并解释“它不起作用”的含义。
  • 你的意思是Collections.binarySearch()
  • @EJP 这是漫长的一天

标签: java arraylist netbeans binary-search


【解决方案1】:

您的代码始终会删除列表中的最后一首歌曲。这就是它与您添加的歌曲“有效”的原因。它没有使用搜索结果。

// binarySearch returns the position of the element in the list
// Or a negative number if not found.
int i = Collections.binarySearch(songs, "metric - fantasies", String.CASE_INSENTITIVE_ORDER);
if (i < 0) {
    // Not found, display something
} else {
    String deleted = songs.remove(i);
}

请记住,阅读 API 文档并了解方法的作用,而不是您认为的作用。

【讨论】:

  • 它会删除所有歌曲,即使歌曲在列表中,它仍然显示未找到
猜你喜欢
  • 2019-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多