2011-07-30 72 views
0
int age == 3; 

if (age == 2) 
NSLog(@"2"); 

if (age == 4) 
NSLog(@"4"); 

if (age == 3) 
NSLog(@"3"); 

我想知道什麼是把else if,而不是有三個if語句。If-else and self question

for (GameObject *character in listOfGameObjects) { 
if (character.myGameObjectType == kPowerUpTypeHealth) { 
       characterHealth = 100.0f; 
     } 
    } 

這是在Viking.m文件中。 characterself(維京人)都有實例變量,setter和getter方法characterHealth。如果我想讓維京人的健康等於100,我必須寫self.characterHealth = 100.0f;以確保健康不會添加到character?或者是我已經有好的?

謝謝!

+2

使用'==',而不是'='來測試相等性!陳述「if(age = 2)**」將** 2分配給「age」,然後測試它是否爲非零,它總是這樣。 –

+0

哎呀,完全忘了沒有Xcode的警告 – stumped

回答

1

的事情是,如果你有3個if語句,所有的這些條件將被選中,因爲年齡只能有1個值,你應該使用

if (age == 2) //You need the double equals, to check for equality, if you use one equals it will assign the value and the if statement will always be true. 

else if (age == 3) 

else if (age == 4) 

所以這些條件之一得到滿足後,其他條件不會被檢查,節省處理時間。

關於自我,這將是雙向的,但是如果characterHealth是@property,採用自行將使用@synthetize setter assing它,所以如果你有它宣佈爲retain它會增加1的retain計數,如果分配它沒有自己它不會增加retain計數。雖然由於您將其指定爲primitive,在這種情況下無關緊要,但只有objects具有保留計數。

1

您的第一個片段將始終記錄2,4和3,因此它與if/else if/else if序列(其始終記錄2,而不是其他任何內容)非常不同。

如果你是用if (a == 2)寫的,那麼與if/else的區別在於你的代碼總是運行三個測試,而有else的代碼可以跳過一些。 (另請參閱switch聲明。)

對於第二個問題,可以省略self。但是,如果它看起來模棱兩可/讓你感到困惑,那麼就放它吧。它不會改變任何東西。

0

在這種情況下,如果和其他如果沒有區別。由於條件獨家考慮這個例子:

if(age > 15) 
{ 
    NSLog(@"over 15"); 
} 

if (age < 17) 
{ 
    NSLog(@"under 17"); 
} 

這將打印 超過15 下17

使用否則,如果只打印其中的一個。

當訪問屬性自我假設。它不會改變字符,因爲你沒有指定character.characterHealth。

1

他們是2個不同的東西。如果你有一個if語句後面加上4個if,那麼這4個條件中只有一個會被執行。例如,如果您有

 int age = 2; 

if (age == 2){ 
    NSLog(@"2"); 
}else if (age <=2){ 
    NSLog(@"<=2"); 
}else if (age >=2){ 
     NSLog(@">=2"); 
} 

上述代碼的結果是2。這是因爲第一個條件是真的,所以我們不需要檢查其他條件。但是,如果你正在處理一堆如果的,說

int age = 2; 

if (age == 2){ 
    NSLog(@"2"); 
} 
if (age <=2){ 
    NSLog(@"<=2"); 
} 
if (age >=2){ 
     NSLog(@">=2"); 
} 

那結果將是2 <=2 >=2。實質上所有的陳述都被執行了。

0

流量控制風格的受熱許多準宗教爭論的主題;)

你會在正常的情況下使用else if,你有一個包羅萬象的else情況之前發現的案件數量有限。假如你想檢查年齡是3,4還是別的:

if (age == 3) { 
} else if (age == 4) { 
} else { 
}