2013-04-11 2 views
0

프로그래밍 초보자입니다. 이 모든 문제가 무엇인지 알아내는 데 어려움을 겪고 있습니다. 메시지에 표시된 텍스트를 무작위로 추출하려고한다는 경고보기입니다. 목표 C에 대한 무작위 화 경고보기 텍스트

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

당신은 YouWin에 저장된 텍스트 값이 필요하지만, 당신은 YouWin 개체 자체를 통과 :

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

그리고 문제는 ... –

+2

여기'message : [NSString stringWithFormat : @ "% @", YouWin]' –

+2

Anoop이 답을 가지고 있습니다. 당신이 여기서하는 것처럼 stringWithFormat을 사용하지 말라. [NSString stringWithFormat : @ "You Win"];'. '@ "You Win"을 단순히 사용하는 것이 더 좋을 것입니다. – sosborn

답변

0

모든.

당신은

[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; 

참고 다시 0 사이의 임의의 숫자와 제외 제공된 인수를, 당신을 제공 arc4random_uniform()의 사용에 번역 할 것이다.

+0

정확하게 말하면'[NSString stringWithFormat : @ "Constant string"]'은 "괜찮습니다"(올바르게 작동합니다), 그것은 단지 불필요한 것입니다. –

+0

그건 내가 말한거야 : * 중복 *. 틀리지 않다. 나는 그것을 어쨌든 명확하게하기 위해 대답을 편집했다. –

+0

@ H2CO3 : 40이 아니야 +6/-2; ( –

2

이 하나 봅니다.

* 참고 :arc4random()을 사용하여 임의의 숫자를 생성 할 수 있습니다.

+0

이유를 입력하십시오. OP는 프로그래밍에 새로운 것을 언급했다. – 11684

+0

@ 11684 : 추가 : –

+0

위대한! +1! @AnoopVaidya – 11684

0

교체 또한

randomNumber = arc4random() %3 + 1; 

이 사용에

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

... Anoop 당신이 stringWithFormat를 사용하고 있지만에서 형식 문자열을 제공하지 않을 언급 한 바와 같이

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; 
+1

왜 난수가 1/2/3을 충족시키지 않습니까? –

+0

그런 번호를 생성하면 항상 1, 2 또는 3이 될 것입니다. –

+0

예요. @GabrielePetronella ... 네 말이 맞아. 나는 모드 기호를 놓쳤다. divide ...... 감사합니다 .... :) – AKB

1

많은 좋은 제안이 있습니다. 나는 AKB8085에 동의한다.

randomNumber()arc4random()으로 바꾸면 컴파일 할 때 도움이됩니다. 그러나 난수 생성기를 다시 구현하는 을 원할 수 있습니다. 이유는 사용자에게 공평합니다. 나는 "당신이이 숫자 범위의 큰 번호로 숫자를 추측하길 바란다고 가정하는 것이 공평한가?"

알고 계셨습니까?

arc4random (3), rand (3) 또는 random (3)을 사용하면 C 함수를 사용하고 있습니다.

  1. arc4random(3) = 0
  2. rand(3)random(3)4294967296RAND_MAX0x7fffffff(214748647)

으로 밖으로 맨 :
는 다음과 같은 범위와 숫자를 추측하도록 사용자에게 요청하고 있습니다 질문에 대답 할 때 도움이 필요하면 다음 요구 사항 질문에 답하십시오.

  1. 최소/최대 범위 제한이 있습니까?
  2. arc4random(3), rand(3), or random(3)을 사용하여 어떤 종류의 지연이 발생합니까? ?
  3. Fisher–Yates_shuffle과 비슷한 NSArray을 사용하고 있습니까?

SUGGESTION : 은 임의의 숫자와 NSArray에 관한 기사를 읽어보십시오.

참고 : 난수는 컴파일러를 처리하는 경향이 있으며 사용자 경험은 방해가됩니다.

+0

사용자는 그 숫자를 거의 추측 할 수있는 기회가없는 것처럼 보입니다. 오히려 관련성이 없다. 그렇지 않으면 의견으로 더 좋을 수도있다. –