Java - Duda sobre matrices

 
Vista:
sin imagen de perfil

Duda sobre matrices

Publicado por Kevin (3 intervenciones) el 12/10/2017 16:06:31
Hola saludos, estoy empezando a programar en java y me encontré con este ejercicio:
Complete el método public static int[][] sumaResta(int [][] mat1, int [][] mat2, int[] valores).
El nuevo int[][] que se ha de devolver almacenará la suma de mat1[i][j] + mat2[i][j] siempre y cuando el resultado de la suma se encuentre dentro de array valores, en caso contrario almacenará la resta entre mat1[i][j] – mat2[i][j]

Para rellenar las filas del nuevo array a devolver se ha de apoyar en un método auxiliar que desarrolle por filas la operación mencionada.


El código que tengo escrito y que es erróneo es este:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
public class Excercise {
    public static int[] auxMet(int [] fila1, int [] fila2, int[] valores) {
        int [] array= new int[valores.length];
        for(int i=0; i<fila1.length && i<fila2.length; i++){
            if(fila1[i]+fila2[i]==valores[i]){
                array[i]= valores[i];
            }else{
                array[i]= fila1[i]-fila2[i];
            }
        }
        return array;
}
 
 
public static int[][] sumaResta(int [][] mat1, int [][] mat2, int[] valores) {
    int [][] array=new int[valores.length][valores.length];
    for(int i = 0; i<mat1.length && i<mat2.length ; i++){
        for(int j=0; j<mat1[i].length && j<mat2[i].length; j++){
            array[i]=auxMet(mat1[i],mat2[i], array[i]);
        }
    }
    return array;
    }
}
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

Duda sobre matrices

Publicado por Juan Francisco (58 intervenciones) el 13/10/2017 18:51:11
Te encontre dos errores el primero que en el metodo lo que le estas pasando es la array instanciada al principio , y le tendrias que pasar la array de valores
1.
1
2
3
4
5
6
7
8
9
public static int[][] sumaResta(int [][] mat1, int [][] mat2, int[] valores) {
    int [][] array=new int[valores.length][valores.length];
    for(int i = 0; i<mat1.length && i<mat2.length ; i++){
        for(int j=0; j<mat1[i].length && j<mat2[i].length; j++){
            array[i]=auxMet(mat1[i],mat2[i], array[i]);=>Aqui le deberias de pasar valores y no la array por que o sino serian todo ceros cuando   llegue al metodo el cual la condicion comparas con la suma ,no va haber ningun numero mayor que cero
        }
    }
    return array;
}
2. y en el metodo deberias de comparar con todos los valores no solo con uno solo sino sera muy dificil que coincidan

1
2
3
4
5
6
7
8
9
int [] array= new int[valores.length];
for(int i=0; i<fila1.length && i<fila2.length; i++){
    if(fila1[i]+fila2[i]==valores[i]){=>Auqi otro bucle que recorra todos los valores y si encuentra uno que salga de bucle sino se quedara con la resta...
        array[i]= valores[i];
    }else{
        array[i]= fila1[i]-fila2[i];
    }
}
return array;


Como no has puesto el metodo main yo he probado con algo asi..


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
public static void main(String[] args) {
     int[][] matriz1 = {{1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12},
        {1, 2, 3, 4}
 
        };
        int[][] matriz2 = {{1, 2, 3, 4},
        {5, 6, 7, 8},
        {9, 10, 11, 12},
        {1, 2, 3, 4}
 
        };
        int[] valores = {8, 2, 25, 10};
 
        int[][] resultado = sumaResta(matriz1, matriz2, valores);
 
        for (int[] x : resultado) {
            for (int y : x) {
                System.out.println("Valores " + y);
            }
            System.out.println("");
        }
 
 public static int[] auxMet(int[] fila1, int[] fila2, int[] valores) {
        int[] array = new int[valores.length];
 
        for (int i = 0; i < fila1.length && i < fila2.length; i++) {
            for (int j = 0; j < valores.length; j++) {2.Recorro todos los valores y siencuentro uno igual a la suma salgo con el break para que no siga..
                if (fila1[i] + fila2[i] == valores[j]) {
                    array[i] = valores[j];
                    break;
                } else {
                    array[i] = fila1[i] - fila2[i];
                }
 
            }
 
        }
        return array;
    }
 
    public static int[][] sumaResta(int[][] mat1, int[][] mat2, int[] valores) {
        int[][] array = new int[valores.length][valores.length];
        for (int i = 0; i < mat1.length && i < mat2.length; i++) {
            for (int j = 0; j < mat1[i].length && j < mat2[i].length; j++) {
                array[i] = auxMet(mat1[i], mat2[i], valores);=>1.Le paso valores y no array
            }
        }
        return array;
    }
 
}

He considerado que las dos matrices son cuadradas mismas filas que columnas , igual que valores que saliera una matriz igual 4x4
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