कैसे ठीक करें सूचकांक सीमा से बाहर था। गैर-नकारात्मक और संग्रह के आकार से कम होना चाहिए।


मैंने इसे कोड किया ताकि यह एक कार्ड प्रदर्शित करे, सिवाय इसके कि ऐसा नहीं होता,
कोड:

   public List<card> displayCard = new List<card>();
    public int displayId;

    public int id;
    public string cardName;
    public int cost;
    public int power;
    public string cardDescription;

    
    public Text nameText;   
    public Text costText;
    public Text powerText;
    public Text descriptionText;
  


    


    // Start is called before the first frame update    
    void Start()
    {
        displayCard[0] = CardDatabase.cardList[displayId];
    }

    // Update is called once per frame
    void Update()
    {
         id = displayCard[0].id;
         cardName = displayCard[0].cardName;
         cost = displayCard[0].cost;
         power = displayCard[0].power;
         cardDescription = displayCard[0].cardDescription;
       

       nameText.text = " " + cardName;
       costText.text = " " + cost;
       powerText.text = " " + power;
       descriptionText.text = " " + cardDescription;
    }
}

I have the cards on a different script

What I have tried:

Changing the card id etc. Rewriting it incase i forgot something, idk what esle to do

समाधान 1

आपने यहां जो छोटा कोड दिखाया है, उससे यह सिर्फ एक अनुमान है। मेरा मानना ​​है कि आपकी त्रुटि विधि प्रारंभ में होती है क्योंकि यह आपकी समस्या विवरण के अनुसार पहली चीज़ लगती है। वास्तव में क्या हो रहा है यह देखने के लिए डिबगर का उपयोग करें और त्रुटि संकेतित लाइन पर ब्रेकपॉइंट लगाएं।

अपने कोड के शीर्ष पर आपने एक नई सूची (डिस्प्लेकार्ड) बनाई है जिसमें कुछ नंबर “कार्ड” ऑब्जेक्ट (डिफ़ॉल्ट क्षमता) हो सकते हैं। लेकिन, इस समय यह खाली है और इसमें कोई कार्ड नहीं है।

मेथड स्टार्ट में (और अपडेट में) आप डिस्प्लेकार्ड के इंडेक्स 0 पर कार्ड ऑब्जेक्ट का उपयोग करने का प्रयास करते हैं – लेकिन इसमें कोई कार्ड नहीं हैं इसलिए 0 सीमा से बाहर है। आपको पहले सूची में एक कार्ड डालना होगा (विधि जोड़ें एक तरीका है)।

फिर यह सिर्फ एक अनुमान है क्योंकि इंडेक्स 0 का उपयोग करने का प्रयास करने से पहले मुझे ऐसा कोई कोड नहीं दिखता जो डिस्प्लेकार्ड में कार्ड ऑब्जेक्ट जोड़ता हो। यदि ऐसा करने के लिए कोई कोड है, तो क्या हो रहा है यह जानने के लिए डिबगर का उपयोग करें। वे डिबगर्स मूल्यवान उपकरण किसी ऐसे व्यक्ति से लेते हैं जिसने बिना किसी सिस्टम के सिस्टम शुरू किया है।

समाधान 2

FreedMalloc ने जो कहा है, उसमें बस एक सारणी या ind3exable संग्रह जोड़ना है List<T> युक्त N तत्वों के पास वैध सूचकांक मान हैं 0 को N - 1.
तो ए List<int> जिसमें तीन मान शामिल हैं

सी#
List<int> myNumbers = new List<int>() {10, 20, 30};

तीन वैध सूचकांक होंगे: 0, 1और 2 – कोई भी अन्य मान (सकारात्मक या नकारात्मक) आपको “सूचकांक सीमा से बाहर” अपवाद देगा

चूँकि आपका कोड स्पष्ट रूप से एक सूचकांक का उपयोग करता है 0और आपको सीमा से बाहर अपवाद मिलता है जिसका अर्थ है कि आपका संग्रह खाली है: इसमें कोई तत्व नहीं है इसलिए इसमें कोई वैध अनुक्रमणिका नहीं है।

इसका समाधान कम से कम एक जोड़ना है card संग्रह के लिए!

लेकिन… आपका कोड वास्तव में गड़बड़ लगता है: मुझे नहीं पता कि आप जो कोड दिखा रहे हैं वह किस वर्ग में है, लेकिन दो संभावनाएं हैं:
1) वह कोड का हिस्सा है card कक्षा। यदि ऐसा है, तो इसे डिस्प्ले घटकों तक पहुंच नहीं मिलनी चाहिए nameText, costText, powerTextऔर descriptionText क्योंकि वे आपके फॉर्म का हिस्सा हैं, कार्ड का नहीं।

2) वह कोड आपके फॉर्म का हिस्सा है। यदि ऐसा है, तो इसमें कार्ड संबंधी मान जैसे नहीं होने चाहिए cardName, cost, powerऔर cardDescription क्योंकि वे व्यक्ति का हिस्सा हैं card और डुप्लिकेट करने के बजाय उसे वहीं समाहित किया जाना चाहिए।

इस बारे में सोचें कि आप क्या करने का प्रयास कर रहे हैं: मुझे संदेह है कि आप कक्षाओं और उदाहरणों के साथ-साथ संग्रहों की अवधारणा पर थोड़ा अस्पष्ट हैं! :डी

コメント

タイトルとURLをコピーしました