Java - Sumar y restar vector de una matriz con java

 
Vista:

Sumar y restar vector de una matriz con java

Publicado por pixari (1 intervención) el 02/10/2018 13:38:09
Soy un principiante en el mundo de la programación y estoy tratando de resolver un ejercicio. Pero me he quedado totalmente estancado.

El problema es: se tiene 4 formatos posibles:
1
2
3
4
5
?<int><int><int><int>
<int>?<int><int><int>
<int><int>?<int><int>
<int><int><int>?<int>
<int><int><int><int>?

Tengo que resolver el? en cada caso, pero teniendo en cuenta que el segundo vector se multiplica por 3, el tercero por 1 y el cuarto por 0 y se resta el último vector.
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
class LeaderBoard{
public static void main(String[] args){
String errorFormat = "Format error: You must write 4 integers and one symbol ?";
 
int[] list = null;
int position = -1, j = 0;
 
if(args.length!=5){
System.err.println(errorFormat);
}else{
try {
list = new int[4];
for(int i=0;i<args.length;i++){
if(position== -1 && args[i].equals("?")){
position = i;
}else if((position!= -1 && args[i].equals("?")) || (j==4)){
//Hay mas de un ? o no hay ?
System.err.println(errorFormat);
System.exit(1);
}else{
list[j] = Integer.parseInt(args[i]);
j++;
}
}
} catch (NumberFormatException e) {
System.err.println(errorFormat);
System.exit(1);
}
 
System.out.println("The missing value is "+calculate(position,list));
}
}
 
static int calculate(int position, int[] list) {
    if (position == 0){
        positon=list[i]+list[i+1]*3+list[i+2]*1+list[i+3]*0-list[i+4];
    } else if (position == 1) {
        positon=list[i]+list[i+1]*3+list[i+2]*1+list[i+3]*0-list[i+4];
    } else if (position ==2 ) {
        positon=list[i]+list[i+1]*3+list[i+2]*1+list[i+3]*0-list[i+4];
    } else if (position ==3 ) {
        positon=list[i]+list[i+1]*3+list[i+2]*1+list[i+3]*0-list[i+4];
    } else if (position == 4) {
        positon=list[i]+list[i+1]*3+list[i+2]*1+list[i+3]*0-list[i+4];
    }
    return 0;
}


Me gustaría usar algo parecido a un bucle tipo for, pero me parece imposible, entonces solo uso if / else if. ¿Alguien podría ayudarme?
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

Sumar y restar vector de una matriz con java

Publicado por Kabuto (1385 intervenciones) el 03/10/2018 00:04:32
Hola.
No tengo muy clara la mecánica del ejercicio.

Lo primero, creo que hay cierta confusión de conceptos.
Aquí no se está trabajando con ninguna matriz.
Se estaría trabajando con un vector de 5 elementos, no con una matriz de 5 vectores...

Luego, dicho vector lo recibe el programa como argumento, ya que se supone que el usuario llamará a nuestro programa Java desde una línea de comandos seguido de 5 elementos, que serán: 4 enteros y 1 signo de interrogación.
Por ejemplo;
LeaderBoard ? 10 20 30 40

Ahora habría que hacer estas comprobaciones:
- el usuario ha tecleado 5 elementos, es decir, que args.length == 5
- De esos 5 elementos, uno, y solo uno, es un "?"
- Los otros 4 elementos, son números que podemos convertir a int

Bien, tras estas comprobaciones, este sería pues nuestro vector --> | ? | 10 | 20 | 30 | 40 |
Bueno, en realidad el primer elemento no sería un "?" porque eso no podemos ponerlo en un vector de enteros. Ese primer elemento en realidad sería un 0 y es en realidad el valor que tenemos que calcular

Y esta es la parte que no tengo claro del todo.
¿Para despejar el "?" hay que sumar los otros valores, pero siguiendo las indicaciones antes mencionadas.

O sea que:
- "?" = (10 * 3) + (20 *1) + (40 * 0) - 40;
- "?" = 30 + 20 + 0 - 40;
- "?" = 10;

¿Es esta la mecánica del programa?
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 Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Sumar y restar vector de una matriz con java

Publicado por Kabuto (1385 intervenciones) el 03/10/2018 00:51:38
Bueno, suponiendo que esta sea la mecánica del programa, se me ocurre el siguiente código.

Necesitaremos dos atributos/variables principalmente:
- un vector de tamaño [5] , podemos llamarlo list como pusiste tú, donde pondremos los enteros que recibimos por argumentos.
- un simple int para guardar la posicion donde encontremos el "?". Segun el valor de este int, despejaremos el valor de "?" de una forma u otra.

1
2
static int[] list = new int[5];//Aqui pondremos los enteros recibidos por argumentos
static int posicion = -1;//Esta será la posicion correspondiente al "?" y será el valor a despejar

Luego, lo primero que debería hacer el programa es llevar a cabo las tres comprobaciones para validar los argumentos recibidos.
Para esto he decidido hacer un metodo de tipo booleano, llamado validarArgumentos().
Este metodo llevará a cabo las comprobaciones una a una, y si alguna falla, al momento retornará FALSE indicando que los argumentos recibidos no son válidos.
Si las tres comprobaciones tienen éxito, devolverá TRUE.

En el curso de dichas comprobaciones, aprovecharemos para averiguar cual es la posicion del "?" y también para rellenar nuestro vector list con los enteros recibidos, si es que son válidos.

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
static boolean validarArgumentos(String[] argum) {
    //Primera comprobacion, el vector de argumentos ha de medir 5
    if (argum.length != 5) {
        System.out.println("Numero de argumentos invalido. Proporcione 5 argumentos.");
        return false;
    }
 
    //Segunda comprobacion, uno de los argumentos,y solo uno, ha de ser un "?".
    //De paso, averiguamos cual es la posicion del "?" para luego poder despejarlo
    int cuentaInterrogantes = 0;
    for (int i = 0; i < 5; i++) {
        if (argum[i].equals("?")) {
            cuentaInterrogantes++;
            posicion = i;//Guardamos posicion del "?"
        }
    }
    //Tras contar interrogantes, solo es valido si hemos contado 1
    if (cuentaInterrogantes != 1) {
        System.out.println("Error en el argumento \"?\". No se ha encontrado o hay mas de uno.");
        return false;
    }
 
    //Tercera comprobacion, todos los argumentos, excepto el que contiene "?",han de ser enteros
    //De paso, vamos rellenando el vector list
    try {
        for (int i = 0; i < 5; i++) {
            if (i != posicion) {//Solo los distintos de posicion, que es donde esta el "?"
                list[i] = Integer.parseInt(argum[i]);
            }
        }
    }
    catch(NumberFormatException e) {
        System.out.println("Alguno de los argumentos no es un valor entero.");
        return false;
    }
 
    //Si hemos llegado aqui, es que todas las comprobaciones han sido correctas.
    //Por lo tanto, los argumentos SON VALIDOS.
    return true;
}

Luego ya en el main(), lo primero que haremos será preguntar que valor nos devuelve este método que valida los argumentos.
Si su valor es TRUE, entonces significa que los argumentos son válidos y que además ya tenemos nuestro vector list con numeros enteros y también tenemos la posicion del "?".

Lo que hacemos entonces es comprobar mediante un swtich el valor de posicion. Según su valor, despejaremos el "?" de una forma u otra.

Pongo aquí ahora toda la clase completa, con el main() al final ya funcionando.
Si no es esta la mecánica ha seguir, o bien hay algo que no entiendes o cualquier duda o incorrección que puedas apreciar, posteala aquí y lo solucionamos.
Un saludo.

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
public final class LeaderBoard {
 
	static int[] list = new int[5];//Aqui pondremos los enteros recibidos por argumentos
	static int posicion = -1;//Esta será la posicion correspondiente al "?" y será el valor a despejar
 
	static boolean validarArgumentos(String[] argum) {
		//Primera comprobacion, el vector de argumentos ha de medir 5
		if (argum.length != 5) {
			System.out.println("Numero de argumentos invalido. Proporcione 5 argumentos.");
			return false;
		}
 
		//Segunda comprobacion, uno de los argumentos,y solo uno, ha de ser un "?".
		//De paso, averiguamos cual es la posicion del "?" para luego poder despejarlo
		int cuentaInterrogantes = 0;
		for (int i = 0; i < 5; i++) {
			if (argum[i].equals("?")) {
				cuentaInterrogantes++;
				posicion = i;//Guardamos posicion del "?"
			}
		}
		//Tras contar interrogantes, solo es valido si hemos contado 1
		if (cuentaInterrogantes != 1) {
			System.out.println("Error en el argumento \"?\". No se ha encontrado o hay mas de uno.");
			return false;
		}
 
		//Tercera comprobacion, todos los argumentos, excepto el que contiene "?",han de ser enteros
		//De paso, vamos rellenando el vector list
		try {
			for (int i = 0; i < 5; i++) {
				if (i != posicion) {//Solo los distintos de posicion, que es donde esta el "?"
					list[i] = Integer.parseInt(argum[i]);
				}
			}
		}
		catch(NumberFormatException e) {
			System.out.println("Alguno de los argumentos no es un valor entero.");
			return false;
		}
 
		//Si hemos llegado aqui, es que todas las comprobaciones han sido correctas.
		//Por lo tanto, los argumentos SON VALIDOS.
		return true;
	}
 
	public static void main(String[] args) {
 
		if (validarArgumentos(args)) {
			int valor=0;//Aqui es donde despejaremos "?"
			/*
			 * resolver el "?" en cada caso, pero teniendo en cuenta que 
			 * el segundo vector se multiplica por 3, 
			 * el tercero por 1 y el cuarto por 0 
			 * y se resta el último vector.
			 */
			switch(posicion) {
				case 0://"?" Esta en la primera posicion
					valor = (list[1]*3) + (list[2]*1) + (list[3]*0) - (list[4]);
					break;
				case 1://"?" Esta en la segunda posicion
					valor = (list[0]) + (list[2]*1) + (list[3]*0) - (list[4]);
					break;
				case 2://"?" Esta en la tercera posicion
					valor = (list[0]) + (list[1]*3) + (list[3]*0) - (list[4]);
					break;
				case 3://"?" Esta en la cuarta posicion
					valor = (list[0]) + (list[1]*3) + (list[2]*1) - (list[4]);
					break;
				case 4://"?" Esta en la quinta posicion
					valor = (list[0]) + (list[1]*3) + (list[2]*1) - (list[3]*0);
					break;
			}
 
			System.out.println("Valor despejado: " + valor);
		}
 
	}
 
}
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