Objective c 随机非重复数Xcode
对不起,我英语不好,我是阿根廷人。我有一个问题,我正在制作一个琐事应用程序,从逻辑上讲,它不必再问同样的问题。我有30个问题,这是我的代码:Objective c 随机非重复数Xcode,objective-c,xcode,random,repeat,Objective C,Xcode,Random,Repeat,对不起,我英语不好,我是阿根廷人。我有一个问题,我正在制作一个琐事应用程序,从逻辑上讲,它不必再问同样的问题。我有30个问题,这是我的代码: -(IBAction)randomear{ random1=arc4random() % 30; if (random1 == 0) { labelpregunta.text = @"Las ovejas pueden nadar?"; } if (random1 == 1) {
-(IBAction)randomear{
random1=arc4random() % 30;
if (random1 == 0)
{
labelpregunta.text = @"Las ovejas pueden nadar?";
}
if (random1 == 1)
{
labelpregunta.text = @"Con que se tiñe la lana de negro?";
}
if (random1 == 2)
{
labelpregunta.text = @"De que material es el mejor casco?";
}
if (random1 == 3)
{
labelpregunta.text = @"Para fabricar lana necesitas 4 _____";
}
}
我想创建一个NSArray,如果有一个数字重复,它会再次洗牌
如何操作?您需要的实际上是一个(因为当新值出现时,您将对其进行扩展),并使用
-indexOfObject
检查以前选择的值。预先警告,NSMutableArray存储类型为id
的对象,int是一个原语。在存储随机值之前,需要将其包装在NSNumber中。大概是这样的:
//.h
@property (nonatomic, strong) NSMutableArray *previouslySelectedValues;
//.m
-(IBAction)randomear{
//I suppose this is an int, right?
//Supongo que esto es un número entero.
random1=arc4random() % 30;
//check if the array can find the object. It internally uses `-isEqual` in a loop for us
//estamos comprobando si la matriz se puede encontrar el objeto
if (![previouslySelectedValues indexOfObject:[NSNumber numberWithInt:random1]]) {
if (random1 == 0)
{
labelpregunta.text = @"Las ovejas pueden nadar?";
}
if (random1 == 1)
{
labelpregunta.text = @"Con que se tiñe la lana de negro?";
}
if (random1 == 2)
{
labelpregunta.text = @"De que material es el mejor casco?";
}
if (random1 == 3)
{
labelpregunta.text = @"Para fabricar lana necesitas 4 _____";
}
//et cetera/ etcétera
//add the object because it doesn't exist and we don't want to select it again.
//Añadir el objeto a la matriz debido a que es nuevo
[previouslySelectedValues addObject:[NSNumber numberWithInt:random1]];
}
else {
//do nothing, or use the below pick again if you want
//No hacer nada, o utilizar el método de abajo para elegir otro número
//[self randomear];
return;
}
}
实际上,您需要的是一个(因为您将在新值出现时对其进行扩展),并使用
-indexOfObject
检查以前选择的值。预先警告,NSMutableArray存储类型为id
的对象,int是一个原语。在存储随机值之前,需要将其包装在NSNumber中。大概是这样的:
//.h
@property (nonatomic, strong) NSMutableArray *previouslySelectedValues;
//.m
-(IBAction)randomear{
//I suppose this is an int, right?
//Supongo que esto es un número entero.
random1=arc4random() % 30;
//check if the array can find the object. It internally uses `-isEqual` in a loop for us
//estamos comprobando si la matriz se puede encontrar el objeto
if (![previouslySelectedValues indexOfObject:[NSNumber numberWithInt:random1]]) {
if (random1 == 0)
{
labelpregunta.text = @"Las ovejas pueden nadar?";
}
if (random1 == 1)
{
labelpregunta.text = @"Con que se tiñe la lana de negro?";
}
if (random1 == 2)
{
labelpregunta.text = @"De que material es el mejor casco?";
}
if (random1 == 3)
{
labelpregunta.text = @"Para fabricar lana necesitas 4 _____";
}
//et cetera/ etcétera
//add the object because it doesn't exist and we don't want to select it again.
//Añadir el objeto a la matriz debido a que es nuevo
[previouslySelectedValues addObject:[NSNumber numberWithInt:random1]];
}
else {
//do nothing, or use the below pick again if you want
//No hacer nada, o utilizar el método de abajo para elegir otro número
//[self randomear];
return;
}
}
我不会生成一个随机数并检查该数是否已被使用,而是创建一个由0到29个数字组成的NSMutableArray(每个数字都包装在一个NSNumber中),然后使用Gregory Goltsov在这个问题中提供的类别对数组进行随机洗牌 然后,您只需从NSMutable数组的开始迭代每个NSNumber对象。i、 e
#import "NSMutableArray_Shuffling.h // From Gregory Goltsov
NSMutableArray* randomNumbers = [[NSMutableArray alloc] init];
for(int i=0; i<30; i++) {
[randomNumbers addObject:[NSNumber numberWithInt:i]];
}
[randomNumbers shuffle]; // From Gregory Goltsov
...
int lastIndex = 0;
-(IBAction)randomear
{
if (lastIndex<30) {
NSNumber* theRandomNumber = [randomNumbers objectAtIndex:lastIndex];
int theQuestion = [theRandomNumber intValue];
if (theQuestion == 0) {
labelpregunta.text = @"Las ovejas pueden nadar?";
}
if (theQuestion == 1) {
labelpregunta.text = @"Con que se tiñe la lana de negro?";
}
if (theQuestion == 2) {
labelpregunta.text = @"De que material es el mejor casco?";
}
if (theQuestion == 3){
labelpregunta.text = @"Para fabricar lana necesitas 4 _____";
}
//et cetera/ etcétera
lastIndex++;
} else {
// No more questions
}
}
#从Gregory Goltsov导入“NSMutableArray_Shuffling.h//
NSMUTABLEARRY*随机数=[[NSMUTABLEARRY alloc]init];
对于(int i=0;i,我不会生成一个随机数并检查该数是否已被使用,而是创建一个由0到29个数字组成的NSMutableArray(每个数字都包装在一个NSNumber中),然后使用Gregory Goltsov在这个问题中提供的类别对数组进行随机洗牌
然后,您只需从NSMutable数组的开始迭代每个NSNumber对象
#import "NSMutableArray_Shuffling.h // From Gregory Goltsov
NSMutableArray* randomNumbers = [[NSMutableArray alloc] init];
for(int i=0; i<30; i++) {
[randomNumbers addObject:[NSNumber numberWithInt:i]];
}
[randomNumbers shuffle]; // From Gregory Goltsov
...
int lastIndex = 0;
-(IBAction)randomear
{
if (lastIndex<30) {
NSNumber* theRandomNumber = [randomNumbers objectAtIndex:lastIndex];
int theQuestion = [theRandomNumber intValue];
if (theQuestion == 0) {
labelpregunta.text = @"Las ovejas pueden nadar?";
}
if (theQuestion == 1) {
labelpregunta.text = @"Con que se tiñe la lana de negro?";
}
if (theQuestion == 2) {
labelpregunta.text = @"De que material es el mejor casco?";
}
if (theQuestion == 3){
labelpregunta.text = @"Para fabricar lana necesitas 4 _____";
}
//et cetera/ etcétera
lastIndex++;
} else {
// No more questions
}
}
#从Gregory Goltsov导入“NSMutableArray_Shuffling.h//
NSMUTABLEARRY*随机数=[[NSMUTABLEARRY alloc]init];
对于(int i=0;i“它不必再问相同的问题”是什么意思?你是说它应该只问每个问题一次,还是说它可以不止一次地问每个问题?我不知道objective-c,但也许你可以理解其中的原理:“它不必再问相同的问题”可能重复意思是?你的意思是它应该只问每个问题一次,还是说它可以问每个问题不止一次?我不知道objective-c,但也许你可以理解其中的原理:可能是我像你写的那样重复了,但它不起作用。(什么是“//[self randomear];”如果您取消对该行的注释,则该方法将调用自身,直到找到有效的数字。我将其放置为与您编写的一样,但它不起作用。(什么是“//[self randomear];”如果取消对该行的注释,则该方法将调用自身,直到找到有效的数字。