0

Estoy recibiendo un error llamado "System.NullReferenceException:" en mi programa de C#.

He buscado en esta web cómo solucinarlo y he leído que suele ser porque no se hace uso de la inicialización, por lo que los valores a los que es trata de acceder quedan como "nulos".

Sin embargo, estoy revisando y veo que sí inicializo dichos valores usando el "new" (o al menos creo que sí lo hago).

Este es el fragmento problemático del código:

 public bool load(string fileName)
    {
        // Read the board from "fileName" and fill the _cells with its information
        try
        {
            using (StreamReader sr = new StreamReader(fileName))
            {
                int validLines = 0;
                int currentRow = 0;
                string line = sr.ReadLine();

                while (line != null)
                {
                    if (validLines == 0)
                    {
                        int.TryParse(line, out _numRows);
                        validLines++;
                    }
                    else if (validLines == 1)
                    {
                        int.TryParse(line, out _numCols);
                        validLines++;

                        _cells = new Cell[_numRows, _numCols]; /*INICIALIZO LA ARRAY CELL*/
                    }

                    else
                    {
                        int currentCol = 0, j = 0;
                        for (int i = 0; i < _numCols; i++)
                        {
                            j++;

                            if ((line[j] > 0 && line [j] < 9) || line [j] == 'B' || line[j] == 'V')
                            {
                                _cells[currentRow, currentCol] = new Cell(CellState.Covered, line[j]); /*INICIALIZO CADA INSTANCIA DE LA ARRAY CELL*/
                                currentCol++;
                            }
                            else
                            {
                                i--;
                            }
                        }
                        currentRow++;
                    }
                }


                while ((line = sr.ReadLine()) != null)
                {
                    Console.WriteLine(line);
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine("The file could not be read");
            Console.WriteLine(e.Message);
            return false;
        }
        return true;


    }


    public void print()
    {
        // Print the content of the board

        for (int i = 0; i < _numRows; i++)

            for (int k = 0; k < _numCols; k++)
            {
                Console.Write(" " + _cells[i, k].getContent()); 
                //AQUÍ ES DONDE ME NOTIFICA QUE SUCEDE EL ERROR


            }
        }
        Console.ReadKey();
    }

¿Alguien puede localizar dónde radica el error? Entiendo que por alguna razón los valores en la array _cells[] quedan como null, por eso cuando aplico el método print() el programa peta y me devuelve error.

Gracias.

gbianchi
  • 19,675
  • 11
  • 38
  • 58

1 Answers1

0

Según entiendo, pasas un fichero que la primera línea es numero de filas, el segundo el numero de columnas y a partir de ahí los datos, pero el problema que yo veo en primer lugar, es que solo lees una línea del fichero, solo haces: string line = sr.ReadLine(); Antes de entrar al while, por lo que line nunca va a cambiar, por lo que numero de filas lo leera bien, numero de columnas te pondrá el mismo numero que el de las filas, y cuando haga la siguiente iteración te saltara la excepción.

Si quitas la línea string line = sr.ReadLine();

y cambias el primer while por este: while ((line = sr.ReadLine()) != null)

Prueba y cuentas

Juanjo
  • 665
  • 5
  • 11
  • El archivo que importa es un tablero establecido en un bloc de notas. Este contiene un número + enter. De nuevo, un número + enter. Luego, un "cuadrado de carácteres". La primera línea es para determinar el número de filas. El segundo para el número de columnas. El tercero, para establecer el contenido de las celdas de la array Cell[,]. Seria algo como: 8 (enter) 8 (enter) abdcefg (enter) hijklmn (enter) opqerst (enter) uvwxyz – Steve Sando Mar 24 '18 at 17:26
  • Si, pero tu solo lees una línea del fichero, la que lees antes de entrar en el while, luego no vuelves a leer nada – Juanjo Mar 24 '18 at 17:33
  • Vale, entiendo lo que me dices. Es decir, si la primera línea es 8, estará leyendo ese 8 cada vez, ¿no? De todos modos, ¿cómo podría hacer que leyera las otras partes del fichero que no consigo que lea? – Steve Sando Mar 24 '18 at 17:47
  • Hola Juanjo. Tratemos de no contestar preguntas para la cual ya tenemos una pregunta y una respuesta general, ya que son fallos particulares de cada uno y no aportan nada a nadie mas. Gracias! – gbianchi Mar 24 '18 at 18:00