2012-11-12 86 views
-1

我正在初始化一个方法的静态数组,然后想要在非静态方法中使用它,并且它会抛出nullpointerException。当我创建一个小例子时,一切都奏效了。我不知道那有什么问题。附加解决方案。静态数组C中的空指针异常#

http://www.speedyshare.com/QRjW5/Funkcjonalnosc-Kopia-2.zip

主要方法是在类

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

namespace Funkcjonalnosc 
{ 
    class Dzwiek 
    { 
     static Dzwiek[] tabRefDzwiekow;// = zaladujDzwieki();//przy uruchomeniu dzwieki referencyjne wczytaja sie raz 
     double hz; 
     String dzwiek; 
     bool first = true; 

     Dzwiek(double hz) { 
      this.hz = hz; 
      dzwiek = dopasujDzwiek(hz); 
     } 
     Dzwiek(String dzwiek, double hz) { 
      this.dzwiek = dzwiek; 
      this.hz = hz; 
     } 

     public static void zaladujDzwieki() { 
      System.IO.StreamReader sr = System.IO.File.OpenText("dzwieki.txt"); 
      tabRefDzwiekow = new Dzwiek[100]; 
      string s = ""; 
      int i = 0; 
      string[] splitted; 
      while ((s = sr.ReadLine()) != null) { 
       splitted = s.Split('\t'); 
       tabRefDzwiekow[i] = new Dzwiek(splitted[0], Double.Parse(splitted[1])); 
       Console.WriteLine(tabRefDzwiekow[i].hz); 
      } 
      sr.Close(); 
     } 
     //Znajduje odpowiedni dzwiek w tablicy dzwiekow 
     String dopasujDzwiek(double hz) { 
      double obecnaRoznica, poprzedniaRoznica = int.MaxValue; 
      string dopasowanyDzwiek = ""; 
      for (int i = 0; i < tabRefDzwiekow.Length; i++) { 
       obecnaRoznica = Math.Abs(hz - tabRefDzwiekow[i].hz);//THROWS EXCEPTION! 
       if (obecnaRoznica > poprzedniaRoznica) 
        return tabRefDzwiekow[i - 1].dzwiek; 
       poprzedniaRoznica = obecnaRoznica; 
      } 
      return dopasowanyDzwiek; 
     } 
     static void Main(string[] args) { 
      zaladujDzwieki(); //initilize the static ARRAY tabRefDzwieki 
      Dzwiek dzwiek = new Dzwiek(440); //uses that array by calling function in //constructor doPasujDzwieki() 
      Console.Read(); 
     } 
    } 
} 
+0

那么,哪一行抛出异常后访问未初始化的Dzwiek对象的hz财产? –

+1

看起来你并没有在迭代之间递增你的数组索引。你是不是指'tabRefDzwiekow [i ++] = new Dzwiek(splitted [0],Double.Parse(splitted [1]));'而不是'tabRefDzwiekow [i] = new Dzwiek(splitted [0],Double.Parse(splitted [1]));'? –

+1

让您的代码保持英文的一个理由:我们可以阅读它! –

回答

2

除非我mising的东西,只要你拨打

tabRefDzwiekow[i] = new Dzwiek(splitted[0], Double.Parse(splitted[1])); 

i将永远是零,然后当你访问它后来,在你的for循环中,

obecnaRoznica = Math.Abs(hz - tabRefDzwiekow[i].hz);//THROWS EXCEPTION 

你想第一次迭代

+0

谢谢。这真是基本的错误;/再次感谢你。 – Robert