2016-06-02 11 views
1

のアレイにアクセスできないは、私は、エラーメッセージ「オブジェクトのインスタンスに設定されていないオブジェクト参照とNullReferenceException」:取得保つユニティのカスタムクラス

listOfBanks [0] .Deposit(50)。

accntBlnce.text = "口座残高:\ n" + listOfBanks [curBank] .GetBalance()のToString( "C")。

私は3つのオプションをドロップダウンメニューに表示しています。また、Debug.Logで配列のアイテム数を3としてカウントします。しかし、私は彼らと何もできません。銀行変数は、インスペクタのドロップダウンオブジェクトとして設定され、パネル内のテキストオブジェクトとしてのaccntBlnceとして設定されます。

コードは次のとおりです。

Banks.cs

public class Banks : MonoBehaviour { 

    public Dropdown banks; 
    public Text accntBlnce; 
    public Bank[] listOfBanks; 
    public int curBank = 0; 

    void Start() { 
     listOfBanks = new Bank[banks.options.Count]; 
     listOfBanks[0].Deposit(50); 
    } 

    void Update() { 
     curBank = banks.value; 
     accntBlnce.text = "Account Balance:\n" + listOfBanks[curBank].GetBalance().ToString("c"); 
    } 
} 

Bank.cs

public class Bank{ 

    public Bank() { } 

    public Bank(string orgn, float amntToRprt, float blnce) { 
     origin = orgn; 
     amountToReport = amntToRprt; 
     balance = blnce; 
    } 

    public string origin { get; set; } 
    public float amountToReport { get; set; } 
    public float balance { get; set; } 

    public bool Deposit(float amnt) { 
     if (amnt > 0) { 
      balance += amnt; 
      if(amnt > amountToReport) { 
       FlagForReport(); 
      } 
      return true; 
     } 
     else 
      return false; 
    } 

    private void FlagForReport() { 
     throw new NotImplementedException(); 
    } 

    public float GetBalance() { 
     return balance; 
    } 

    public bool Withdraw(float amnt) { 
     if (amnt > 0) { 
      if (balance >= amnt) { 
       balance -= amnt; 
       return true; 
      } 
      else 
       return false; 
     } 
     else 
      return false; 
    } 

    public bool Transfer(float amnt, Bank bank) { 
     if (amnt > 0) { 
      if (balance >= amnt) { 
       if(bank.Deposit(amnt)) 
        balance -= amnt; 
       return true; 
      } 
      else 
       return false; 
     } 
     else 
      return false; 
    } 
} 

答えて

2

これは、第4の時間配列の問題は、同じ問題と、同じ溶液で今週頼まれています。

あなたがここに配列宣言:

listOfBanks = new Bank[banks.options.Count]; 

をしかし、あなたは、配列を宣言し、サイズを設定

listOfBanks[0].Deposit(50);listOfBanks[curBank].GetBalance().ToString("c").

を呼び出す前に、各銀行スクリプトの新しいインスタンスを作成していないがではありません - スクリプトの新しいインスタンスを作成するのと同じです。

解決策は、配列をループして、それぞれの新しいインスタンスを作成することです。あなたのBanks.cs

、以下のいずれかであなたのStart()機能でコードを置き換える:ええ、私はあなたの応答を受け取ったとして、私はこれを入力して、私はダム感じる

void Start() 
{ 
    //Declare how much Bank array should be created 
    listOfBanks = new Bank[banks.options.Count]; 

    //Now Create instance of each bank 
    for (int i = 0; i < listOfBanks.Length; i++) 
    { 
     //Create new instance of each Bank class 
     //listOfBanks[i] = new Bank(); 
     listOfBanks[i] = new Bank("", 50, 50); 
    } 

    listOfBanks[0].Deposit(50); 
} 
+0

。私は最後にプログラムされてからずっとずっと続いています。質問を削除するだけでいいですか? –

+0

@ The_Guyいいえ。人々はそれから学ぶでしょう。ユニティ配列のヌルのものをグーグルグーグルの誰もがこれらの間に出くわすだろう。より多くの人々が同じ質問をもう一度聞くのを防ぎます。 – Programmer

関連する問題