C sharp - No encuentro el error NullReferenceException

 
Vista:
Imágen de perfil de Debyon

No encuentro el error NullReferenceException

Publicado por Debyon (3 intervenciones) el 02/11/2017 01:56:20
Estoy usando el Visual Studio 7.2.2 para Mac. Aprendi C# hace un par de años y ahora estoy volviendo a recordar todo porque he estado como 1 año sin hacer nada. El caso es que haciendo un programa simple de consola que leyera un array de 2 dimensiones con unos datos predefinidos y luego los mostrara en pantalla. Supuestamente te pide el modelo a Buscar (que estan apuntados todos en el source), luego si hay 1 sola coincidencia imprime los datos de ese modelo en particular, si hay mas de 1 coincidencia imprime toda la lista de coincidencias y si no hay ninguna coincidencia muestra un mensaje diciendo que no ha encontrado nada.

El caso es que me sale System.NullReferenceException justo despues de poner la palabra para buscar y quiza soy yo que he perdido practica pero no encuentro el fallo. Os dejo el source para que lo veais. Aclaro que me gustaria que me explicarais el fallo en lugar de corregir sin mas el source porfavor. Graciaaas!!

PD: Pongo el codigo y ademas dejo el archivo source, no se de que modo os es mas comodo que lo ponga pero decidmelo para hacerlo asi siempre.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
using System;
 
namespace ListadeModelos
{
    class Program
    {
 
        static string[,] modelos = new string[6,9];//contiene los datos de los modelos
 
        static void Main(string[] args)
        {
            string busqueda;//palabra que se usara para buscar entre los modelos del array
 
            while(true)
            {
                Console.Write("Modelo a buscar:       ");
                busqueda = Console.ReadLine();
 
                if (busqueda.ToUpper() == "SALIR")//para salir del programa
                {
                    break;
                }
 
                Buscar(busqueda);
            }
        }
 
        static void Buscar(string busqueda)//Busca en el array un resultado y luego ejecuta el metodo para cada caso
        {
            int contador = 0; // cuenta la cantidad de veces que encuentra un resultado
            int encontrado = 0; //contendra el numero de array para en caso de encontrar solo un resultado saber cual es.
            for (int x = 0; x < modelos.GetLength(0) ; x++)
            {
                if (modelos[x, 0].ToUpper().Contains(busqueda.ToUpper()))
                {
                    contador++;
                    encontrado = x;
                }
            }
 
            if (contador == 1)
            {
                Console.WriteLine("\n\n");
                Imprimir(encontrado);
            }
            else if (contador > 1)
            {
                Console.WriteLine("\n\n");
                Imprimirlista(busqueda);
            }
            else
            {
                Console.WriteLine("\n\n");
                Console.WriteLine("No se han encontrado resultados.");
            }
        }
 
        static void Imprimir(int encontrado)//Imprime en pantalla los datos en caso de que solo haya una coincidencia en la busqueda
        {
            for (int x = 0; x < modelos.GetLength(1); x++)
            {
                if(modelos[encontrado, x].Contains("Nulo"))
                {
                    break;
                }
                Console.WriteLine(modelos[encontrado, x]);
            }
        }
 
        static void Imprimirlista(string busqueda)//Imprime en pantalla la lista de nombres de los modelos encontrados en caso de que haya mas de 1 coincidencia
        {
            for (int x = 0; x < modelos.GetLength(0); x++)
            {
                if (modelos[x,0].ToUpper().Contains(busqueda.ToUpper()))
                {
                    Console.WriteLine(modelos[x,0]);
                }
            }
        }
 
        static void CrearLista()//Crea la lista a partir del array asignando todos los campos como "Nulo" y despues rellenandolos manualmente.
        {
            //creacion de la list
 
            for (int x = 0; x < modelos.GetLength(0); x++)
            {
                for (int y = 0; y < modelos.GetLength(1); y++)
                {
                    modelos[x, y] = "Nulo";
                }
            }
 
            modelos[0, 0] = "Aitana Blanco";
            modelos[0, 1] = "Base D.Doble";
            modelos[0, 2] = "FC-9922/417D";
            modelos[0, 3] = "Peso:   55g";
            modelos[0, 4] = "Dens:   155";
            modelos[0, 5] = "Nulo";
 
            modelos[1, 0] = "Aitana Gris";
            modelos[1, 1] = "Base D.Doble";
            modelos[1, 2] = "Base Aitana Jet";
            modelos[1, 3] = "Peso:   55g";
            modelos[1, 4] = "Dens:   155";
            modelos[1, 5] = "Nulo";
 
            modelos[2, 0] = "Alaska Gris";
            modelos[2, 1] = "Engobe Campana";
            modelos[2, 2] = "Engobe Gres Campana";
            modelos[2, 3] = "Peso:   50g";
            modelos[2, 4] = "Dens:   180";
            modelos[2, 5] = "Base Campana";
            modelos[2, 6] = "MGM-0222";
            modelos[2, 7] = "Peso:   55g";
            modelos[2, 8] = "Dens:   180";
 
            modelos[3, 0] = "Andes Marengo";
            modelos[3, 1] = "Base D.Doble";
            modelos[3, 2] = "Base Etna Jet";
            modelos[3, 3] = "Peso:   50g";
            modelos[3, 4] = "Dens:   155";
            modelos[3, 5] = "Nulo";
 
            modelos[4, 0] = "Andes Sage";
            modelos[4, 1] = "Base D.Doble";
            modelos[4, 2] = "M81/202";
            modelos[4, 3] = "Peso:   50g";
            modelos[4, 4] = "Dens:   155";
            modelos[4, 5] = "Nulo";
 
            modelos[5, 0] = "Arcalis Mix";
            modelos[5, 1] = "Base D.Doble";
            modelos[5, 2] = "EG-445/18992";
            modelos[5, 3] = "Peso:   55g";
            modelos[5, 4] = "Dens:   152";
            modelos[5, 5] = "Nulo";
        }
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 356
Plata
Ha disminuido 1 puesto en C sharp (en relación al último mes)
Gráfica de C sharp

No encuentro el error NullReferenceException

Publicado por Miguel (160 intervenciones) el 02/11/2017 08:05:51
Hola,
No estoy seguro pero supongo que es porque tu variable estática string[,] modelos solo se ha iniciado (no se ha cargado) y en varias funciones tratas de acceder a sus elementos (mientras su valor es null).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Debyon

No encuentro el error NullReferenceException

Publicado por Debyon (3 intervenciones) el 02/11/2017 11:28:16
Pero el ultimo metodo “static void CrearLista” si inicia la lista con todos los valores y al ser static deberia iniciarse al arrancar el programa sin necesidad de invocarlo no? ademas he tratado de hacer la llamada al metodo CrearLista(); en Main al principio y el resultado es el mismo.

Gracias por responder!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Wilfredo Patricio Castillo
Val: 707
Oro
Ha mantenido su posición en C sharp (en relación al último mes)
Gráfica de C sharp

No encuentro el error NullReferenceException

Publicado por Wilfredo Patricio Castillo (416 intervenciones) el 02/11/2017 20:39:51
Tu error es porque estás tratando de buscar en un array que no tiene nada, sus valores están en nulo, ya que haces todo el proceso de búsqueda, pero nunca llenas los datos en el array.

Tu primera línea lo único que hace es declarar el array y reservarle el espacio, pero no lo estás cargando con los datos, entonces al intentar buscar algo, truena porque los valores están todavía en nulo.

Para que no tengas problemas, lo que debes hacer es, antes del while,llama a CrearLista();
Con eso los datos se llenarán en el array y no tendrás problemas.

Saludos cordiales,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Debyon

No encuentro el error NullReferenceException

Publicado por Debyon (3 intervenciones) el 02/11/2017 21:08:48
Tal como habeis dicho Ambos elerror es no hacer la llamada. Dije que lo habia probado pero ahora he recordado que probé a hacer la llamada antes de agregar el for en la funcion CrearLista asi que el error era el mismo. Un fallo de novato donde los hay
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar