Objective c “随机”中无重复项;案例;列表

Objective c “随机”中无重复项;案例;列表,objective-c,code-duplication,Objective C,Code Duplication,我是一个完全的初学者,几乎没有编程方面的知识,但我正在帮助我11岁的儿子创建一个小测验应用程序,我们有一个大问题,因为我们不能让每个类别的问题在所有问题出现之前都不重复。 请在下面找到我们目前的情况(受我们在网上找到的一个示例启发),如果有一个简单的解决方案不需要很好的xcode体验就可以实现,我将非常感谢您在这个问题上的帮助 提前感谢,当然,如果问题需要进一步澄清,请告诉我: -(void)Category2{ switch (QuestionSelected) { case 0:

我是一个完全的初学者,几乎没有编程方面的知识,但我正在帮助我11岁的儿子创建一个小测验应用程序,我们有一个大问题,因为我们不能让每个类别的问题在所有问题出现之前都不重复。 请在下面找到我们目前的情况(受我们在网上找到的一个示例启发),如果有一个简单的解决方案不需要很好的xcode体验就可以实现,我将非常感谢您在这个问题上的帮助

提前感谢,当然,如果问题需要进一步澄清,请告诉我:

-(void)Category2{

switch (QuestionSelected) {
    case 0:
        QuestionText.text = [NSString stringWithFormat:@"question1?"];
        [Answer1 setTitle:@"A1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"A2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"A3" forState:UIControlStateNormal];
        Answer3Correct = YES;
        break;

    case 1:
        QuestionText.text = [NSString stringWithFormat:@"question2"];
        [Answer1 setTitle:@"A1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"A2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"A3" forState:UIControlStateNormal];
        Answer2Correct = YES;
        break;

    case 2:
        QuestionText.text = [NSString stringWithFormat:@"question3"];
        [Answer1 setTitle:@"A1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"A2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"A3" forState:UIControlStateNormal];
        Answer1Correct = YES;
        break;




    default:
        break;
}

}

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
    // Custom initialization
}
    return self;
}

- (void)viewDidLoad
{

if (GameInProgress == NO) {
    LivesNumber = 3;
    ScoreNumber = 0;
    GameInProgress = YES;
}


Result.hidden = YES;
Exit.hidden = YES;
StartOver.hidden = YES;

Lives.text = [NSString stringWithFormat:@"%i", LivesNumber];
Score.text = [NSString stringWithFormat:@"%i", ScoreNumber];



Answer1Correct = NO;
Answer2Correct = NO;
Answer3Correct = NO;


LevelLoaded = [[NSUserDefaults standardUserDefaults] integerForKey:@"LevelSaved"];

QuestionSelected = arc4random_uniform(5);
附录(2014年7月4日)

请原谅我,因为我们是新来的网站,我们已经回应了PJS在下面的评论他的答案,我相信格式使它不清楚。请在下面再次找到我们项目当前状态的副本,希望他能看到出了什么问题(副本仍然出现):


LevelLoaded=[[NSUserDefaults standardUserDefaults]整数工作:@“LevelSaved”];
整数长度=20;
int myArray[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19};
对于(int i=0;i
阿登杜姆2号(10.07.2014)

请在下面找到整个m文件: (此处的随机值仅适用于类别1) 这就是你所说的FOR循环中的开关块吗? 它仍然在重复这些问题。我是不是把课文放错位置了

#import "Game.h"

@interface Game ()


@end


@implementation Game



-(void)RightAnswer{

ScoreNumber = ScoreNumber + 1;
Score.text = [NSString stringWithFormat:@"%i", ScoreNumber];
StartOver.hidden = NO;
Answer1.hidden = YES;
Answer2.hidden = YES;
Answer3.hidden = YES;
QuestionText.hidden = YES;
Result.hidden = NO;
Result.image = [UIImage imageNamed:@"rightanswer.jpg"];


}

-(void)WrongAnswer{

LivesNumber = LivesNumber - 1;
Lives.text = [NSString stringWithFormat:@"%i", LivesNumber];
StartOver.hidden = NO;
Answer1.hidden = YES;
Answer2.hidden = YES;
Answer3.hidden = YES;
QuestionText.hidden = YES;
Result.hidden = NO;
Result.image = [UIImage imageNamed:@"wronganswer.jpg"];

if (LivesNumber == 0) {
    Result.image =  [UIImage imageNamed:@"gameover.jpg"];
    StartOver.hidden = YES;
    Exit.hidden = NO;
    GameInProgress = NO;

}

}


-(IBAction)Answer1:(id)sender{


if (Answer1Correct == YES) {
    [self RightAnswer];
}
else{
    [self WrongAnswer];
}

}

-(IBAction)Answer2:(id)sender{

if (Answer2Correct == YES) {
    [self RightAnswer];
}
else{
    [self WrongAnswer];
}

}
-(IBAction)Answer3:(id)sender{

if (Answer3Correct == YES) {
    [self RightAnswer];
}
else{
    [self WrongAnswer];
}

}


-(void)Category1{

int length = 3;
int myArray [] = {0,1,2};


for (int i = 0; i < length - 1; ++i) {
    int j = arc4random_uniform(length - i) + i;
    int tmp = myArray[i];
    myArray[i] = myArray[j];
    myArray[j] = tmp;

}

for (int i = 0; i < length; ++i) {
    QuestionSelected = myArray[i];
}

switch (QuestionSelected) {


    case 0:
        QuestionText.text = [NSString stringWithFormat:@"question1"];
        [Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
        Answer3Correct = YES;
        break;

    case 1:
        QuestionText.text = [NSString stringWithFormat:@"question2"];
        [Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
        Answer1Correct = YES;
        break;

    case 2:
        QuestionText.text = [NSString stringWithFormat:@"question3"];
        [Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
        Answer1Correct = YES;
        break;


    default:
        break;


}


}
-(void)Category2{

switch (QuestionSelected) {
    case 0:
        QuestionText.text = [NSString stringWithFormat:@"question1"];
        [Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
        Answer3Correct = YES;
        break;

    case 1:
        QuestionText.text = [NSString stringWithFormat:@"question2"];
        [Answer1 setTitle:@"T.Cubillas(PER)" forState:UIControlStateNormal];
        [Answer2 setTitle:@"R.Rensenbrink(NET)" forState:UIControlStateNormal];
        [Answer3 setTitle:@"J.Jordan(SCO)" forState:UIControlStateNormal];
        Answer2Correct = YES;
        break;

    case 2:
        QuestionText.text = [NSString stringWithFormat:@"question3"];
        [Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
        Answer1Correct = YES;
        break;



    default:
        break;
}

}
-(void)Category3{

switch (QuestionSelected) {
    case 0:
        QuestionText.text = [NSString stringWithFormat:@"question1"];


        [Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
        Answer2Correct = YES;
        break;

    case 1:
        QuestionText.text = [NSString stringWithFormat:@"question2"];
        [Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
        Answer2Correct = YES;
        break;

    case 2:
        QuestionText.text = [NSString stringWithFormat:@"question3"];
        [Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
        Answer3Correct = YES;
        break;

    default:
        break;
}



}



- (void)viewDidLoad

{

if (GameInProgress == NO) {
    LivesNumber = 3;
    ScoreNumber = 0;
    GameInProgress = YES;
}


Result.hidden = YES;
Exit.hidden = YES;
StartOver.hidden = YES;

Lives.text = [NSString stringWithFormat:@"%i", LivesNumber];
Score.text = [NSString stringWithFormat:@"%i", ScoreNumber];



Answer1Correct = NO;
Answer2Correct = NO;
Answer3Correct = NO;


LevelLoaded = [[NSUserDefaults standardUserDefaults] integerForKey:@"LevelSaved"];




switch (LevelLoaded) {


    case 1:
        LevelSelected.text = [NSString stringWithFormat:@"Beginner"];
        [self Category1];
        break;
    case 2:
        LevelSelected.text = [NSString stringWithFormat:@"Intermediate"];
        [self Category2];
        break;
    case 3:
        LevelSelected.text = [NSString stringWithFormat:@"Expert"];
        [self Category3];
        break;

    default:
        break;


[super viewDidLoad];

}

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];

}

@end
#导入“Game.h”
@界面游戏()
@结束
@实施游戏
-(无效)正确答案{
ScoreNumber=ScoreNumber+1;
Score.text=[NSString stringWithFormat:@“%i”,ScoreNumber];
StartOver.hidden=否;
回答1.隐藏=是;
回答2.hidden=是;
回答3.hidden=是;
QuestionText.hidden=是;
Result.hidden=否;
Result.image=[UIImage ImageName:@“rightanswer.jpg”];
}
-(无效)回答错误{
LivesNumber=LivesNumber-1;
Lives.text=[NSString stringWithFormat:@“%i”,LivesNumber];
StartOver.hidden=否;
回答1.隐藏=是;
回答2.hidden=是;
回答3.hidden=是;
QuestionText.hidden=是;
Result.hidden=否;
Result.image=[UIImage ImageName:@“errorAnswer.jpg”];
if(LivesNumber==0){
Result.image=[UIImage ImageName:@“gameover.jpg”];
StartOver.hidden=是;
Exit.hidden=否;
GameInProgress=否;
}
}
-(iAction)回答1:(id)发送者{
如果(回答1正确==是){
[自我回答];
}
否则{
[自我回答];
}
}
-(iAction)回答2:(id)发送者{
如果(回答2正确==是){
[自我回答];
}
否则{
[自我回答];
}
}
-(iAction)应答者3:(id)发送者{
如果(回答3正确==是){
[自我回答];
}
否则{
[自我回答];
}
}
-(无效)类别1{
整数长度=3;
int myArray[]={0,1,2};
对于(int i=0;i#import "Game.h"

@interface Game ()


@end


@implementation Game



-(void)RightAnswer{

ScoreNumber = ScoreNumber + 1;
Score.text = [NSString stringWithFormat:@"%i", ScoreNumber];
StartOver.hidden = NO;
Answer1.hidden = YES;
Answer2.hidden = YES;
Answer3.hidden = YES;
QuestionText.hidden = YES;
Result.hidden = NO;
Result.image = [UIImage imageNamed:@"rightanswer.jpg"];


}

-(void)WrongAnswer{

LivesNumber = LivesNumber - 1;
Lives.text = [NSString stringWithFormat:@"%i", LivesNumber];
StartOver.hidden = NO;
Answer1.hidden = YES;
Answer2.hidden = YES;
Answer3.hidden = YES;
QuestionText.hidden = YES;
Result.hidden = NO;
Result.image = [UIImage imageNamed:@"wronganswer.jpg"];

if (LivesNumber == 0) {
    Result.image =  [UIImage imageNamed:@"gameover.jpg"];
    StartOver.hidden = YES;
    Exit.hidden = NO;
    GameInProgress = NO;

}

}


-(IBAction)Answer1:(id)sender{


if (Answer1Correct == YES) {
    [self RightAnswer];
}
else{
    [self WrongAnswer];
}

}

-(IBAction)Answer2:(id)sender{

if (Answer2Correct == YES) {
    [self RightAnswer];
}
else{
    [self WrongAnswer];
}

}
-(IBAction)Answer3:(id)sender{

if (Answer3Correct == YES) {
    [self RightAnswer];
}
else{
    [self WrongAnswer];
}

}


-(void)Category1{

int length = 3;
int myArray [] = {0,1,2};


for (int i = 0; i < length - 1; ++i) {
    int j = arc4random_uniform(length - i) + i;
    int tmp = myArray[i];
    myArray[i] = myArray[j];
    myArray[j] = tmp;

}

for (int i = 0; i < length; ++i) {
    QuestionSelected = myArray[i];
}

switch (QuestionSelected) {


    case 0:
        QuestionText.text = [NSString stringWithFormat:@"question1"];
        [Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
        Answer3Correct = YES;
        break;

    case 1:
        QuestionText.text = [NSString stringWithFormat:@"question2"];
        [Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
        Answer1Correct = YES;
        break;

    case 2:
        QuestionText.text = [NSString stringWithFormat:@"question3"];
        [Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
        Answer1Correct = YES;
        break;


    default:
        break;


}


}
-(void)Category2{

switch (QuestionSelected) {
    case 0:
        QuestionText.text = [NSString stringWithFormat:@"question1"];
        [Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
        Answer3Correct = YES;
        break;

    case 1:
        QuestionText.text = [NSString stringWithFormat:@"question2"];
        [Answer1 setTitle:@"T.Cubillas(PER)" forState:UIControlStateNormal];
        [Answer2 setTitle:@"R.Rensenbrink(NET)" forState:UIControlStateNormal];
        [Answer3 setTitle:@"J.Jordan(SCO)" forState:UIControlStateNormal];
        Answer2Correct = YES;
        break;

    case 2:
        QuestionText.text = [NSString stringWithFormat:@"question3"];
        [Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
        Answer1Correct = YES;
        break;



    default:
        break;
}

}
-(void)Category3{

switch (QuestionSelected) {
    case 0:
        QuestionText.text = [NSString stringWithFormat:@"question1"];


        [Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
        Answer2Correct = YES;
        break;

    case 1:
        QuestionText.text = [NSString stringWithFormat:@"question2"];
        [Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
        Answer2Correct = YES;
        break;

    case 2:
        QuestionText.text = [NSString stringWithFormat:@"question3"];
        [Answer1 setTitle:@"answer1" forState:UIControlStateNormal];
        [Answer2 setTitle:@"answer2" forState:UIControlStateNormal];
        [Answer3 setTitle:@"answer3" forState:UIControlStateNormal];
        Answer3Correct = YES;
        break;

    default:
        break;
}



}



- (void)viewDidLoad

{

if (GameInProgress == NO) {
    LivesNumber = 3;
    ScoreNumber = 0;
    GameInProgress = YES;
}


Result.hidden = YES;
Exit.hidden = YES;
StartOver.hidden = YES;

Lives.text = [NSString stringWithFormat:@"%i", LivesNumber];
Score.text = [NSString stringWithFormat:@"%i", ScoreNumber];



Answer1Correct = NO;
Answer2Correct = NO;
Answer3Correct = NO;


LevelLoaded = [[NSUserDefaults standardUserDefaults] integerForKey:@"LevelSaved"];




switch (LevelLoaded) {


    case 1:
        LevelSelected.text = [NSString stringWithFormat:@"Beginner"];
        [self Category1];
        break;
    case 2:
        LevelSelected.text = [NSString stringWithFormat:@"Intermediate"];
        [self Category2];
        break;
    case 3:
        LevelSelected.text = [NSString stringWithFormat:@"Expert"];
        [self Category3];
        break;

    default:
        break;


[super viewDidLoad];

}

}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];

}

@end
/* Create an array of 5 indices */
int length = 5;
int myArray[] = {0,1,2,3,4};

/* This loop performs a Fisher-Yates shuffle.   */
/* Could be implemented as a function or method */
/* for clarity or encapsulation purposes.       */
for (int i = 0; i < length - 1; ++i) {
    int j = arc4random_uniform(length - i) + i;
    int tmp = myArray[i];
    myArray[i] = myArray[j];
    myArray[j] = tmp;
}
for (int i = 0; i < length; ++i) {
    QuestionSelected = myArray[i];
    // do whatever the heck you want with QuestionSelected
}