[ Foro de C# ]

Lío con los objetos

12-May-2010 12:29
Jess S.
4 Respuestas

¡Hola!

Estoy tratando de realizar un programa para resolver sudokus en C# con SharpDevelop y ver así el alcance de mis conocimientos.

He preparado 3 archivos dentro del mismo proyecto: Program.cs, Sudoku.cs y Pruebaceldas.cs que contienen clases del mismo nombre.

En Sudoku.cs creo un array que pretendo que contenga los 81 valores del sudoku:
public ushort[]matrizSudoku = new ushort[CELDASSUD];
y un método que rellena las celdas del array:
public void creaSudoku(string lineaSudoku).

En Pruebaceldas.cs creo un objeto Sudoku denominado sud:
Sudoku sud = new Sudoku();
con el que relleno, comparo y modifico valores de:
sud.matrizSudoku[],
que los compruebo mediante Console.Writeline en distintos lugares. El asunto funciona, pero....

Me voy al Program.cs, donde está Main, en el que creo objetos de las otras dos clases mediante:
Pruebaceldas prue = new Pruebaceldas();
Sudoku sud = new Sudoku();
y pretendo imprimir los nuevos valores de matrizSudoku[] mediante:
for (byte i=0;i<sud.j;i++) {
   Console.WriteLine("La celda {0} vale:  {1}",i,sud.matrizSudoku[i]);}

pero ¡Sorpresa! (al menos para mi) me pone los 81 valores de sud.matrizSudoku CERO.

La pregunta es ¿Cómo si en Pruebaceldas tenía los valores correctos Program me los convierte en CERO?

Saludos.


14-May-2010 12:08
Jess S.

¡Hola!

Me respondo yo mismo a medida que lo voy comprendiendo.

En la clase Pruebaceldas se crea un objeto de la clase Sudoku. Los valores que se manipulan son los de este objeto, no los de su clase.

Cuando creo un objeto de la clase Sudoku en Programa, éste no tiene que ver nada con el de Pruebaceldas, por lo que sus valores están puestos a cero.

Lo que me gustaria es ir almacenando todas las variaciones que se van produciendo en el array del sudoku en un archivo al que se pudiese acceder y modificar desde cualquier otro.

Saludos.


16-May-2010 20:21
Nacho Cabanes (+31)

Sin ver todo el fuente, no puedo opinar mucho, pero un par de cosas:

- Yo crearía un array [9,9] en vez de uno [81], me parece más natural.

- Lo de "crearSudoku" debería estar en el constructor. Si no, asegúrate al menos de que lo llamas antes de empezar a mostrar datos.

- Puedes crearte dos métodos auxiliares: un "Mostrar" que lo muestre en pantalla, y otro "Volcar" que será casi idéntico pero añadirá (Append) a un fichero de texto el contenido del sudoku, de modo que lo puedas analizar con más detalle.

Aun así, insisto, si pones algún fuente, al menos el de la clase Sudoku, podré opinar sobre funcionamiento e incluso sobre alternativas "de estilo" para hacer las cosas de manera más purista.



25-May-2010 08:47
Jess S.

¡Hola!

Antes de enviar ningún fuente lleno de incongruencias, me gustaría aclararme un poco más en el tema. Entiendo muy bien lo de las puertas, los gatos y los coches, pero me atasco ante un problema matemático. Mi problema es crear varios objetos de distintas clases y juntar la información de todos ellos en Main. Voy a lo concreto.

Mi pregunta es:

¿Cómo se podría plantear la resolución, por ejemplo, de una ecuación de segundo grado mediante la POO? O si esto fuera demasiado simple y se resolviese con una sola clase, cualquier otro tema de este estilo en el que se necesiten objetos de dos o más clases.

Saludos





29-May-2010 00:03
Nacho Cabanes (+31)

La resolución de una ecuación de segundo grado es un problema demasiado sencillo como para descomponerlo en clases. Ten en cuenta que apenas son 5 líneas de programa.

Tendrías que pensar un programa que sí implique varios objetos que colaboran. Por ejemplo, buscando algún problema matemático... un programa para representar gráficas de funciones podría descomponerse en algo como:

- La clase "función", que debería ser capaz de devolver la Y que corresponde a una cierta X, la X que corresponde a una Y, ver si un punto pertenece a ella o no, calcular el valor máximo y/o mínimo en un intervalo, etc.

- Una clase "entrada", que recibiera datos del usuario, ocultando las peculiaridades de la consola, de Windows Forms o del entorno que eligieras.

- Una clase "trazador", que se encargara de dibujar la gráfica, y que debería tener métodos para dibujar un punto, establecer la escala horizontal y vertical, o los valores mínimos y máximos, etc.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)