随机化Objective C的警报视图文本

时间:2013-04-11 17:09:22

标签: objective-c

我是编程新手。我很难发现这有什么问题。这是一个警报视图,我试图随机化消息中显示的文本。

-(void)alert:(id)sender{
int randomNumber;
randomNumber = (randomNumber() %3 + 1);
NSLog(@"%i", randomNumber);

if (randomNumber == 1) {
    self.YouWin.text = [NSString stringWithFormat:@"You Win"];
}
else if (randomNumber == 2) {
    self.YouWin.text = [NSString stringWithFormat:@"You Lose"];
}
else if (randomNumber == 3) {
    self.YouWin.text = [NSString stringWithFormat:@"Tie"];
}
NSLog(@"%@",YouWin);
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Hello" message:[NSString stringWithFormat:@"%@",YouWin] delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];
[alert show];
button.hidden = YES;

4 个答案:

答案 0 :(得分:2)

试试这个:

UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Hello" 
                                               message:self.YouWin.text 
                                              delegate:self 
                                     cancelButtonTitle:@"Ok" 
                                     otherButtonTitles:nil];

您需要存储在YouWin中的文本值,但是您自己传递了YouWin对象。

* 注意:您可以使用arc4random()生成随机数。

答案 1 :(得分:1)

有很多好的建议;我同意AKB8085。

randomNumber()替换arc4random()将有助于编译时。 但您可能希望重新考虑实施随机数生成器。原因在于您的用户是否公平。我提出了一个问题,“假设你希望你的用户用这么大的数字范围来猜测一个数字,这是否公平?”

你知道吗?

使用arc4random(3),rand(3)或random(3)您正在使用C函数。
您要求用户猜测具有以下范围的数字:

  1. arc4random(3) = 04294967296
  2. rand(3)random(3)最高RAND_MAX 0x7fffffff (214748647)
  3. 要帮助回答您的问题,请回答以下要求问题:

    1. 是否存在最小/最大范围限制?
    2. 会发生什么类型的引人注目的延迟    使用arc4random(3), rand(3), or random(3)
    3. Fisher–Yates_shuffle中使用NSArray是更好的答案吗?
    4. <强> SUGGESTION: 阅读有关随机数和NSArray的文章。

      注意: 随机数往往会给编译器带来任务,并且会妨碍您的用户体验。

答案 2 :(得分:0)

替换

randomNumber = (randomNumber() %3 + 1);

randomNumber = arc4random() %3 + 1;

也可以使用这个...

if (randomNumber == 1) {
self.YouWin.text = [NSString stringWithFormat:@"You Win"];
}
else if (randomNumber == 2) {
self.YouWin.text = [NSString stringWithFormat:@"You Lose"];
}
else if (randomNumber == 3) {
self.YouWin.text = [NSString stringWithFormat:@"Tie"];
}
NSLog(@"%@",YouWin);


UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Hello" 
                                               message:self.YouWin.text 
                                              delegate:self 
                                     cancelButtonTitle:@"Ok" 
                                     otherButtonTitles:nil];

[alert show];
button.hidden = YES;

答案 3 :(得分:0)

正如Anoop所说,你正在使用stringWithFormat,但你根本没有提供格式字符串。

你应该做

[NSString stringWithFormat:@"%@", @"You Win"];

但这非常多余,虽然正确,但它完全等同于使用@"You Win"

也是关于问题的一般方法的建议。不要使用大if-else语句,最好将所有字符串存储到数据结构中,然后随机访问它。

在代码中,这将转换为

NSArray * outcomes = @[ @"You Win", @"You lose", @"Tie" ];
int randomIndex = arc4random_uniform(outcomes.count);
NSString * randomOutcome = outcomes[randomIndex];
UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Hello"
                                               message:randomOutcome
                                              delegate:self
                                     cancelButtonTitle:@"Ok"
                                     otherButtonTitles:nil];
[alert show];
button.hidden = YES;

请注意arc4random_uniform()的用法,它会返回0和提供的参数之间的随机数,不包括在内。