Java - llenar matriz

 
Vista:
sin imagen de perfil
Val: 10
Ha aumentado su posición en 2 puestos en Java (en relación al último mes)
Gráfica de Java

llenar matriz

Publicado por yami (4 intervenciones) el 18/01/2021 20:52:48
Tengo que hacer un método para llenar una matriz y lo que me ocurre es que cuando creo el objeto no me deja asignar datos en el array, me podrían ayudar para saber que ocurre. Paso código.


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
import java.util.Scanner;
 
 
public class Matriz {
    private int m[][];
    private static int fila;
    private int n;
 
    public Matriz(int n){
        this.fila = n;
        m = new int[n][n];
 
 
    }
     public void asignarDatos(){
       Scanner sc = new Scanner(System.in);
       for(int i=0; i<n; i++){
           for(int j=0; j<n; j++){
               System.out.print("Elemento[" + i + "][" + j + "]:");
               m[n][n]= sc.nextInt();
           }
       }
     }
      public static int getFila() {
        return fila;
    }
 
    public static void setFila(int fila) {
        Matriz.fila = fila;
    }
}




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
package main;
 
import java.util.Scanner;
 
 
 
 
public class Main {
 
 
    public static void main(String[] args) {
     Scanner nc = new Scanner(System.in);
     int fila;
 
   System.out.print("Tamaño de las matrices: ");
   fila=nc.nextInt();
   Matriz.setFila(fila);
   int fila2 = Matriz.getFila();
   Matriz matriz1 = new Matriz(fila2);
   matriz1.asignarDatos();
 
 
 
    }
 
}
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
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

llenar matriz

Publicado por Kabuto (1381 intervenciones) el 19/01/2021 00:24:18
Hola.

Porque en el método asignarDatos() usas el atributo n en los bucles:

1
2
3
4
5
6
7
8
9
public void asignarDatos(){
    Scanner sc = new Scanner(System.in);
    for(int i=0; i<n; i++){
        for(int j=0; j<n; j++){
            System.out.print("Elemento[" + i + "][" + j + "]:");
            m[n][n]= sc.nextInt();
        }
    }
}

Y este atributo en ningún momento recibe ningún valor..
Y ojo porque la n que se recibe entre paréntesis por el constructor, no tiene nada que ver con la n declarada como atributo.
Tienen el mismo nombre, pero no hay relación alguna entre ellas:

1
2
3
4
5
6
7
8
9
10
public class Matriz {
 
	private int m[][];
	private static int fila;
	private int n;
 
	public Matriz(int n){
		this.fila = n;
		m = new int[n][n];
	}

Por tanto, el atributo n tiene valor 0, así que los bucles para llenar la matriz, no se ejecutan.

Así que, o le das valor a n...

O en el método directamente consultas el atributo length de la matriz para saber cuánto miden.

1
2
3
4
5
6
7
8
9
public void asignarDatos(){
    Scanner sc = new Scanner(System.in);
    for(int i=0; i<m.length; i++){
        for(int j=0; j<m.length; j++){
            System.out.print("Elemento[" + i + "][" + j + "]:");
            m[n][n]= sc.nextInt();
        }
    }
}

Si lo pones así verás que ya funciona, así que no necesitas el atributo n.

Y diría que tampoco necesitas el atributo estático fila..., aunque no se muy bien que quieres hacer con él.

En el método main haces un proceso un poco extraño, e innecesario...

1
2
3
4
5
6
7
8
9
10
11
12
13
public static void main(String[] args) {
    Scanner nc = new Scanner(System.in);
    int fila;
 
    System.out.print("Tamaño de las matrices: ");
    fila=nc.nextInt();
    Matriz.setFila(fila);
    System.out.println(Matriz.getFila());
    int fila2 = Matriz.getFila();
    Matriz matriz1 = new Matriz(fila2);
    matriz1.asignarDatos();
 
}

Cuando para iniciar tu clase Matriz, te basta con hacerlo así:

1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) {
    Scanner nc = new Scanner(System.in);
    int fila;
 
    System.out.print("Tamaño de las matrices: ");
    fila=nc.nextInt();
    Matriz matriz1 = new Matriz(fila);
    matriz1.asignarDatos();
 
}

Así que a no ser que a la clase Matriz tengas que añadirle luego más funcionalidades que requieran de ese atributo fila..., ahora mismo no le veo la necesidad de tenerlo.
Y aún menos, que sea estático.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

llenar matriz

Publicado por Sara (1 intervención) el 19/01/2021 17:06:08
Sinceramente parece muy interesante este método. Sin duda junto a posts de Fordatarecovery uno de los mas interesantes sobre este tipo de métodos
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