2014-10-12 22 views
0

我有一個包含5個插槽的清單。在將商品添加到我的廣告資源時,我會檢查最佳廣告位。如果所有插槽都已滿,我想在控制檯中顯示一行並退出該方法,但我無法確定該部分。我知道最佳插槽的價值只會從0到4,但我的if(bestSlot >= 4)工作不正常。當變量達到某個值時返回

int bestSlot = -1; 
for (int i = 0; i < PlayerInventory.Items.Count(); i++) 
{ 
    if (PlayerInventory.Items[i].ItemName == "empty") 
    { 
    if (bestSlot < 0) 
    { 
     bestSlot = i; 
    } 
    } 
    else if (PlayerInventory.Items[i].ItemName != "empty") 
    { 
    if (PlayerInventory.Items[i].ItemName == item.ItemName) 
    { 
     bestSlot = i; 
    } 
    } 
} 

// add now 
if (bestSlot >= 4) 
{ 
    Console.WriteLine("inventory full"); 
    return; 
} 

if (bestSlot >= 0) 
{ //add the item } 

眼下,該項目沒有被添加到清單中,但在(bestSlot>= 0)代碼仍然跑去,我在我的清單中的空槽時,控制檯顯示該行。

+0

你能否提供更多關於你的應用狀態的細節。 PlayerInventory.Items包含哪些項目。項目的價值是什麼 - 尤其是item.ItemName。沒有那麼難以猜測你的代碼將運行的樣子。 – Tuan 2014-10-12 02:15:52

+0

另外最後一部分不清楚:1.沒有添加項目,因爲它沒有代碼?因爲你說2. bestSlot> = 0被執行正確嗎? – Tuan 2014-10-12 02:20:21

+0

您應該將slot的空值綁定到PlayerInventory.Items [i] == null,而不是.ItemName ==「empty」。你可以偶然地有一個名字是「空」的項目。 – Tuan 2014-10-12 02:21:53

回答

0
if (PlayerInventory.Items[4].ItemName != "empty" && PlayerInventory.Items[4].ItemName == item.ItemName) 
{ 
    Console.WriteLine("inventory full"); 
    return; 
} 

在第一次看到你的問題不是很清楚,但我認爲你需要這個。您應該刪除for循環以及循環bestSlot變量中的所有內容。在此之後正確使用所需的代碼。

你的問題是你正在進入PlayerIventory的所有元素,但你只想檢查5.你可以用我向你展示的代碼來做到這一點。

+0

這沒有奏效,但我看到你想要解釋的。 – 2014-10-12 01:35:50

+0

@ChristianFrantz你期望做什麼,考慮工作的邏輯工作。如果5元素不爲空,並且等於item.ItemName表示庫存已滿,則需要。如果你不想解釋你想要什麼...... – mybirthname 2014-10-12 01:37:37