-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();
}
}
}
那么,哪一行抛出异常后访问未初始化的
Dzwiek
对象的hz
财产? –看起来你并没有在迭代之间递增你的数组索引。你是不是指'tabRefDzwiekow [i ++] = new Dzwiek(splitted [0],Double.Parse(splitted [1]));'而不是'tabRefDzwiekow [i] = new Dzwiek(splitted [0],Double.Parse(splitted [1]));'? –
让您的代码保持英文的一个理由:我们可以阅读它! –