gpt4 book ai didi

ios - 随机整数循环

转载 作者:行者123 更新时间:2023-11-28 20:12:13 24 4
gpt4 key购买 nike

我目前正在制作一个播放歌曲的应用程序。我想在每次单击按钮时播放一首随机歌曲。我目前有:

-(IBAction)currentMusic:(id)sender {
NSLog(@"Random Music");
int MusicRandom = arc4random_uniform(2);
switch (MusicRandom) {
case 0:
[audioPlayerN stop];
[audioPlayer play];
break;
case 1:
[audioPlayer stop];
[audioPlayerN play];
break;

但我已经试过了:

- (IBAction)randomMusic:(id)sender {
NSLog(@"Random Music");




NSMutableArray * numberWithSet = [[NSMutableArray alloc]initWithCapacity:3];

int randomnumber = (arc4random() % 2)+1;



while ([numberWithSet containsObject:[NSNumber numberWithInt:randomnumber]])
{
NSLog(@"Yes, they are the same");
randomnumber = (arc4random() % 2)+1;
}

[numberWithSet addObject:[NSNumber numberWithInt:randomnumber]];




NSLog(@"numberWithSet : %@ \n\n",numberWithSet);
switch (randomnumber) {
case 1:
[audioPlayerN stop];
[audioPlayer play];
NSLog(@"1");
break;
case 2:
[audioPlayer stop];
[audioPlayerN play];

NSLog(@"2");
break;
default:
break;

}
}

所有这些都有效,问题是,即使我添加更多歌曲,它们也会重复。我想要一个不会重复的随机代码。就像随机播放歌曲1、歌曲2、歌曲3、歌曲4和歌曲5,播放时全部重新开始。就像一个循环。但是我当前的代码就像歌曲 1、歌曲 1、歌曲 2、歌曲 1、歌曲 2 等等……有什么办法可以不重复歌曲,除非所有歌曲都播放完了吗?非常感谢。

最佳答案

您想生成一个随机排列。

选项 1

向@Alexander 推荐这种更简单的方法......

if(![songsToPlay count])
[songsToPlay addObjectsFromArray:songList];

int index = arc4random_uniform([songsToPlay count]);
playSong(songsToPlay[index]);
[songsToPlay removeObjectAtIndex:index];

快速解释:

  • NSMutableArray *songsToPlay:存储本轮尚未播放的歌曲列表。内容可以是以下类型:
    • NSString,存储一个文件名
    • NSNumber,存储歌曲索引
  • NSArray *songList: 存储你要播放的所有歌曲的列表。内容应与 songsToPlay 类型相同。也可以是 NSMutableArray
  • playSong(id songToPlay):停止所有当前歌曲并播放 songToPlay。您需要编写此函数,因为它取决于您的实现。

选项 2

使用 Knuth shuffles是另一种方法:

unsigned permute(unsigned permutation[], unsigned n)
{
unsigned i;
for (i = 0; i < n; i++) {
unsigned j = arc4random_uniform(i);
permutation[i] = permutation[j];
permutation[j] = i;
}
}

然后每次要随机播放歌曲时调用该函数:

int permutation[NUM_SONGS];

// I'm using a while loop just to demonstrate the idea.
// You'll need to adapt the code to track where you are
// in the permutation between button presses.
while(true) {
for(int i = 0; i < NUM_SONGS; ++i)
permutation[i] = i;

permute(permutation, NUM_SONGS);

for(int i = 0; i < NUM_SONGS; ++i) {
int songNum = permutation[i];
playSong(songNum);
}
waitForButtonPress();
}

关于ios - 随机整数循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19768714/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com