【发布时间】:2016-03-03 17:03:50
【问题描述】:
我正在为 Android 创建一个音乐播放器,并且我正在尝试实现一个计时器功能,您可以在其中设置持续时间,并且该应用会为您提供具有此持续时间的播放列表。我认为用递归来做这件事会很好。这是我的代码:
变量:
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 的 void
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 步
-
如果持续时间仍然不正确,请设置一首新的最前一首歌曲,然后再次执行上述步骤
等等……
我找不到错误...但是Log.e("Index", String.valueOf(i)); 总是给我相同的值:0。一段时间后,应用程序由于堆栈溢出而崩溃。所以似乎递归永远不会停止。有人在我的代码中看到错误吗?有什么问题?
提前致谢
【问题讨论】:
-
为什么你认为这对递归很有用?
-
我不知道你想做什么,但这几乎可以肯定不是这样做的方式......但因为我不知道你想做什么我不能确实为您指明了更好的方式。
-
因为程序首先必须添加歌曲,然后返回并尝试所有组合以获得想要的结果。但我为什么这么认为并不重要。我需要帮助找出我的错误..
-
问题是for循环从
i=0开始进入递归,然后for循环从i=0开始进入递归,然后for循环从i=0开始进入递归...看到问题了吗? -
@cricket_007 但如果条件 (currentLength
标签: java android for-loop recursion