0

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

-(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

4 回答 4

2

试试这个:

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

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

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

于 2013-04-11T17:12:10.363 回答
1

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

替换randomNumber()witharc4random()将在编译时有所帮助。但是您可能需要重新考虑实现一个随机数生成器。原因是对您的用户公平。我提出了一个问题,“假设您希望您的用户猜测具有如此大数字范围的数字是否公平?”

你知道吗?

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

  1. arc4random(3)=04294967296
  2. rand(3)并且random(3)最高RAND_MAX0x7fffffff (214748647)

为了帮助回答您的问题,请回答以下要求问题:

  1. 是否有最小/最大范围限制?
  2. 使用 , 或 会发生什么类型的令人信服arc4random(3)rand(3)延迟random(3)
  3. NSArrayFisher–Yates_shuffle中使用like 是一个更好的答案吗?

建议: 阅读一篇关于随机数和NSArray.

注意: 随机数往往会给编译器带来任务,您的用户体验将受到阻碍。

于 2015-01-06T01:36:44.913 回答
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;
于 2013-04-11T17:20:23.403 回答
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 和提供的参数之间的随机数,排除在外。

于 2013-04-11T17:22:10.127 回答