Foros del Web » Programación para mayores de 30 ;) » Java »

arrays bidimensionales principiante blueJ

Estas en el tema de arrays bidimensionales principiante blueJ en el foro de Java en Foros del Web. Ayuda con matrices principiante. Hola, soy nuevo en java y estoy intentando aprender algo poco a poco. Ya he investigado los asuntillos básicos y tengo ...
  #1 (permalink)  
Antiguo 24/05/2012, 13:03
 
Fecha de Ingreso: mayo-2012
Mensajes: 5
Antigüedad: 12 años, 5 meses
Puntos: 0
arrays bidimensionales principiante blueJ

Ayuda con matrices principiante.

Hola, soy nuevo en java y estoy intentando aprender algo poco a poco. Ya he investigado los asuntillos básicos y tengo una duda que no resuelvo leyendo sobre el tema.
El caso es que me gustaría hacer una clase que hiciera una matriz de las dimensiones que yo le mande, introduciendo x= numero de filas e y=número de columnas. Después necesitaría que se inicializara a la matriz identidad... Una vez logrado eso debo poder cambiarle los valores a cualquier elemento de la matriz a voluntad.

El problema reside en que a la hora de intentar obtener cualquier dato de la matriz (un elemento, numero de filas, imprimirla por pantalla...) me salta el error de que la matriz es null... Entonces es como que no me hace la matriz identidad que le he pedido y no sé por qué. ¿Cómo puedo solucionarlo? Gracias, me serviría de gran ayuda una respuesta que me solucionara lo que está equivocado pero sobre todo con una buena explicación de los motivos.

Gracias, recordad que intento aprender.

código intento 1:

public Matriz(int x, int y){

int matrix[][]=new int [x][y];

for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix.length;j++){
if(i==j){
Matrix[i][j]=1; }

else{
Matrix[i][j]=0;}}}}

public int numerFilas(){
int f = matrix.length;
return f;

y aquí me dice: java.lang.NullPointerException:null. Y efectivamente en
inspect indica la matriz null.

Tambien he probado en el constructor con parametros:
for(int i=0;i<matrix.length;i++){
for(int j=0;j<matrix.length;j++){

Última edición por oups; 24/05/2012 a las 13:14
  #2 (permalink)  
Antiguo 24/05/2012, 14:04
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: arrays bidimensionales principiante blueJ

Falta por ver el resto de código, pero...

Usas indistintamente Matrix y matrix, cuando java es case-sensitive, es decir diferencia entre mayúsculas y minúsculas. Esto da fallo de compilación (se ve que en bluej no).

Si ya tienes x e y que indican el tamaño de la matriz, ¿para qué usas length? Eso te ha llevado a otro error, si x > y tu "rellenado" fallará, ya que estás diciendo que llene x filas y x columnas.

Posiblemente sea esa la causa pero a continuación hay otra cosa, tienes que aprender los ámbitos de variables.

Al declarar matrix dentro de un constructor/método esa variable solo existirá dentro de ese constructor/método, de hecho lo más normal del mundo sería que ni te compilase ya que matrix no existe dentro de numerFilas()
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #3 (permalink)  
Antiguo 24/05/2012, 14:51
 
Fecha de Ingreso: mayo-2012
Mensajes: 5
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: arrays bidimensionales principiante blueJ

1.es siempre con minúscula, me colé.
2.He probado con x e y y el problema persiste.
3.No entiendo por qué al inspeccionar la matriz es null.
4.Gracias.
  #4 (permalink)  
Antiguo 25/05/2012, 03:02
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: arrays bidimensionales principiante blueJ

Yo lo he probado con las modificaciones que te ha indicado Xerelo y funciona perfectamente.

Pon el código completo para que podamos ver exactamente que estás haciendo, porque a veces simplificais el código y os saltáis justo la parte conflictiva.

Saludos.
  #5 (permalink)  
Antiguo 25/05/2012, 08:32
 
Fecha de Ingreso: mayo-2012
Mensajes: 5
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: arrays bidimensionales principiante blueJ

codigo completo:

public class Matriz

private int matriz [][];

public matriz(int x, int y)
{
int matriz[][]=new int [x][y];
for(int i=0; i<x; i++){
for(int j=0; j<y; j++){
if(i==j){
matriz[i][j]=1; }
else{
matriz[i][j]=0;
}}}

public int numeroFilas(){
int f = matriz.length;
return f;}

public int numeroColumnas(){
int c = matriz[0].length;
return c;}

El error es el comentado, compila pero al introducir por medio del constructor con parámetros, por ejemplo una matriz 2x2 o cualquiera, al inspeccionar responde que el array es null.
  #6 (permalink)  
Antiguo 25/05/2012, 11:21
Avatar de Xerelo  
Fecha de Ingreso: mayo-2009
Mensajes: 2.175
Antigüedad: 15 años, 6 meses
Puntos: 306
Respuesta: arrays bidimensionales principiante blueJ

Lo vuelvo a repetir, repásate el ámbito de las variables, es algo básico y como puedes ver necesario. Si pretendes aprender a base de prueba, error, pregunta, te auguro un futuro negro programando.

Cita:
nt matriz[][]=new int [x][y];
Estás creando una referencia local, no usando la referencia externa, que es la que deberías usar.

Cita:
Al declarar matrix dentro de un constructor/método esa variable solo existirá dentro de ese constructor/método
http://tabasco.torreingenieria.unam....e5/cap5-4.html
__________________
Cada vez que solucionas los problemas de alguien que no se esfuerza, piensa en que el día de mañana puede llegar a ser tu compañero de trabajo, o peor, tu jefe.
  #7 (permalink)  
Antiguo 25/05/2012, 11:43
 
Fecha de Ingreso: mayo-2012
Mensajes: 5
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: arrays bidimensionales principiante blueJ

Cita:
Iniciado por Xerelo Ver Mensaje
Lo vuelvo a repetir, repásate el ámbito de las variables, es algo básico y como puedes ver necesario. Si pretendes aprender a base de prueba, error, pregunta, te auguro un futuro negro programando.


Estás creando una referencia local, no usando la referencia externa, que es la que deberías usar.



[url]http://tabasco.torreingenieria.unam.mx/gch/Curso%20de%20Java%20CD/Documentos/froufe/parte5/cap5-4.html[/url]
Lo he puesto a peticion del otro usuario Xerelo. Buen enlace, pero no se cómo extrapolarlo al ámbito de un array.

Última edición por oups; 25/05/2012 a las 11:56
  #8 (permalink)  
Antiguo 25/05/2012, 14:08
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años, 6 meses
Puntos: 344
Respuesta: arrays bidimensionales principiante blueJ

Lo que dice Xerelo es cierto.

El problema es que al crear una variable local en el constructor de Matriz (que debe estar en mayúsculas, por cierto), estás ocultando la variable de la instancia (un atributo de la clase) que has creado con el mismo nombre, es decir, mientras se está ejecutando el código dentro del constructor, estás usando la variable local que has creado y no el atributo del mismo nombre.

Eso quiere decir, que la variable local matriz sólo tiene valor hasta que termina el constructor, una vez finalizado, la variable desaparece. Por supuesto, la variable de instancia (con nombre matriz) no está inicializada (porque nunca la has estado usando realmente).

Código Java:
Ver original
  1. public class Matriz {
  2.  
  3.     private int matriz[][];
  4.  
  5.     public Matriz(int x, int y) {
  6.     //Con esto, estarías ocultando la variable de instancia matriz
  7.     //int matriz[][]=new int [x][y];
  8.  
  9.      //Así es correcto
  10.         matriz = new int[x][y];
  11.         for (int i = 0; i < x; i++) {
  12.             for (int j = 0; j < y; j++) {
  13.                 if (i == j) {
  14.                     matriz[i][j] = 1;
  15.                 } else {
  16.                     matriz[i][j] = 0;
  17.                 }
  18.             }
  19.         }
  20.     }
  21.  
  22.     public int numeroFilas() {
  23.         int f = matriz.length;
  24.         return f;
  25.     }
  26.  
  27.     public int numeroColumnas() {
  28.         int c = matriz[0].length;
  29.         return c;
  30.     }
  31.  
  32.     public static void main(String[] args) {
  33.  
  34.         Matriz m = new Matriz(2, 2);
  35.         System.out.println(m.numeroColumnas());
  36.     }
  37. }
  #9 (permalink)  
Antiguo 25/05/2012, 18:10
 
Fecha de Ingreso: mayo-2012
Mensajes: 5
Antigüedad: 12 años, 5 meses
Puntos: 0
Respuesta: arrays bidimensionales principiante blueJ

Muchisimas gracias a ambos, me ayudaron y ya lo comprendí.

Etiquetas: arrays, bidimensionales, matrices, principiante
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 14:40.