我正在为Android创建一个音乐播放器,并且我正在尝试实现一个计时器功能,您可以在其中设置持续时间,并且该应用程序会为您提供具有此持续时间的播放列表。我试图用递归来做这件事很好。这里是我的代码:for循环的递归永不停止。找不到我的错误
变量:
maxLength = [any value in seconds] ... Wanted duration for the ArrayList with songs
currentLength = 0 ... current Duration of the ArrayList
timerSongs = new ArrayList<Song>() ... the ArrayList with the playlist
allSongs ... ArrayList with all the songs I have on my device
下面是被调用到项目添加到timerSongs
private void addSongs(int index, long maxLength){
if (currentLength<=maxLength){
timerSongs.add(allSongs.get(index));
currentLength = currentLength
+ TimeUnit.MILLISECONDS.toSeconds(allSongs.get(index).getDuration());
for (int i = 0; i < allSongs.size() && currentLength != maxLength; i++){
Log.e("Index", String.valueOf(i));
addSongs(i, maxLength);
}
} else {
currentLength = currentLength
- TimeUnit.MILLISECONDS.toSeconds(timerSongs.get(timerSongs.size()-1).getDuration());
timerSongs.remove(timerSongs.size()-1);
}
}
编辑无效:我试图做的是:
让应用添加歌曲到arrayList(timerSongs),直到它太长
删除过长的
添加下一首歌曲,然后再试一次,如果持续时间(currentLength)过长的歌曲。如果是的话,再次
删除它做步骤3,所有接下来的歌曲
如果持续时间仍是不正确的,树立了新的forelast歌,做上述再次
等步骤上...
我找不到一个错误......但Log.e("Index", String.valueOf(i));
总是给我相同的值:0。过了一段时间,因为一个堆栈溢出的应用程序崩溃。所以它似乎像递归永不停止。有人在我的代码中看到错误吗?有什么问题?
在此先感谢
你为什么认为这将是递归很好的利用? –
我不知道你在做什么,但这几乎肯定不是这样做的......但是因为我不知道你在做什么,所以我不能用更好的方式指出你的意思。 –
因为节目首先必须添加歌曲,然后倒退并尝试所有组合以获得想要的结果。但是为什么我这么认为并不重要。我想帮助找到我的错误.. –