简体   繁体   中英

Null pointer Exception in static array C#

I am initializing static array by a method, then want to use it in non static method and it throws nullpointerException. When I have created small example everything worked. I don't know what is wrong with that. Attaching solution.

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

Main method is in the class

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();
        }
    }
}

unless I'm mising something, whenever you call

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

i will always be zero, and then when you access it later, in your for loop,

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

you're trying to access an uninitialized Dzwiek object's hz property after the first iteration

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM