我正在通过一个方法初始化静态数组,然后想在非静态方法中使用它并抛出nullpointerException。当我创建小例子时,一切正常。我不知道这有什么问题。附加解决方案。
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 :(得分:2)
除非我正在调整某事,否则无论何时打电话
tabRefDzwiekow[i] = new Dzwiek(splitted[0], Double.Parse(splitted[1]));
i
将始终为零,然后当您以后访问它时,在for循环中,
obecnaRoznica = Math.Abs(hz - tabRefDzwiekow[i].hz);//THROWS EXCEPTION
您尝试在第一次迭代后访问未初始化的Dzwiek
对象的hz
属性