Java - Array bidimensional y Metodo añadir

 
Vista:
Imágen de perfil de Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 26/01/2021 19:25:17
hola necesito ayuda porque estoy bloqueado con el ejercicio de clase y el metodo ingresar un comercial en un array bidimensional de 10 filas x 4 columnas. Mi problema reside en que no se como continuar con el metodo ingreso de un comercial con su cif, nombre, apellidos y trimestres (1,2,3,4). Y luego me obliga poner las constantes del ARRAY BIDIMENSIONAL FILASXCOLUMNAS como estáticas y en el ejercicio me pone que no puede ser estática.

En el ejercicio me pide realizar un ejercicio de array bidimensional de enteros de 10 x 4. Las dimensiones de las constantes no podrá ser estática. En este ejercicico en concreto no me pide hacer ArrayList con lo que solo puedo usar array bidimensional.

Tengo dos clases: Principal y Comerciales. Los atributos de la clase Comerciales son: String CIF, String nombre, String apellidos, int[] trimestres.

Descomposición del ejercicio (la información se almacena en un array):
• Array de dos dimensiones (10, 4). Los arrays no serán declarados como globales y estáticos
• La primera dimensión (comercial) y segunda dimensión (trimestre) representarán las ventas de los 10 comerciales durante los cuatro trimestres del año. Las dos dimensiones serán constantes.
• En otro vector de cadenas (array de cadena) se almacenará los 10 comerciales. String [] comerciales
• Menú con 6 opciones. Cada opción es un método independiente
• Se puede modificar cambiar el número de comerciales o el número de trimestres. Codificcar para que no se tenga que cambiar ninguna línea de código. Usar las constantes del array bidimensional como FILAS y COLUMNAS para almacenar 10 y 4.


Clase Comerciales

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
* Aplicación de gestión de ventas de comerciales
 * Array bidimensional de comerciales por trimestres filas x columna
 * A su vez la clase Comerciales tiene dos atributos de tipo array unidimensional
 * el atributo nombreComercial[] almacena los nombres de 10 comerciales
 * el atributo trimestres[] almacena el número del trimestre
 *
 *
 *
 */
package supuesto1;
 
import java.util.Arrays;
 
/**
 * Clase Comerciales que implementa la interfaz Comparable Métodos getters y
 * setters Constructores vacios y con campos Metodos toString Metodos compareTo
 *
 * @author Antonio
 *
 *
 */
public class Comerciales implements Comparable<Comerciales> {
	// atributos de clase
	String cif;
	String nombreComercial;
	String apellidos;
	int[] trimestres;
 
	/**
	 * @return el cif
	 */
	public String getCif() {
		return cif;
	}
 
	/**
	 * @return el nombre
	 */
	public String getNombre() {
		return nombreComercial;
	}
 
	/**
	 * @return el apellidos
	 */
	public String getApellidos() {
		return apellidos;
	}
 
	/**
	 * @return el trimestres
	 */
	public int[] getTrimestres() {
		return trimestres;
	}
 
	/**
	 * @param cif el cif a establecer
	 */
	public void setCif(String cif) {
		this.cif = cif;
	}
 
	/**
	 * @param nombre el nombre a establecer
	 */
	public void setNombre(String nombre) {
		this.nombreComercial = nombre;
	}
 
	/**
	 * @param apellidos el apellidos a establecer
	 */
	public void setApellidos(String apellidos) {
		this.apellidos = apellidos;
	}
 
	/**
	 * @param trimestres el trimestres a establecer
	 */
	public void setTrimestres(int[] trimestres) {
		this.trimestres = trimestres;
	}
 
	/**
	 *
	 */
	public Comerciales() {
		super();
		// TODO Esbozo de constructor generado automáticamente
	}
 
	/**
	 * @param cif
	 * @param nombre
	 * @param apellidos
	 * @param trimestres
	 */
	public Comerciales(String cif, String nombre, String apellidos, int[] trimestres) {
		super();
		this.cif = cif;
		this.nombreComercial = nombre;
		this.apellidos = apellidos;
		this.trimestres = trimestres;
	}
 
	@Override
	public String toString() {
		return "Comerciales [Cif()=" + getCif() + ", Nombre()=" + getNombre() + ", Apellidos()="
				+ getApellidos() + ", Trimestres()=" + Arrays.toString(getTrimestres()) + "]";
	}
 
	// añadir metodo compareTo más tarde
	@Override
	public int compareTo(Comerciales o) {
 
		return 0;
	}
 
}// fin clase Comerciales


Clase Principal
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import java.util.Scanner;
 
/**
 * @author Antonio
 *
 */
public class Principal {
	// importamos las clases necesarias
	static Scanner sc = new Scanner(System.in);
 
	// constantes de las dimensiones del array10.4. EN EL ENUNCIADO PONE QUE NO PUEDE SER ESTÁTICA.
	final static int FILAS = 10; // numero de comerciales
	final static int COLUMNAS = 4; // numero de trimestres
 
 
 
	public static void main(String[] args) {
 
		boolean salir = false;
		int opcion; // guardaremos la opción del usuario
 
		System.out.println("BIENVENIDO A NUESTRA APLICACIÓN DE REGISTRO Y GESTIÓN DE VENTAS");
 
		// hacer tal instrucciones si es distinto de false
		while (!salir) {// salir es false y while ejecuta instrucciones si while es distinto de false
			System.out.println("\n");
			System.out.println(" 1 - Entrada de los nombres de los comerciales");
			System.out.println(" 2 - Entrada de las ventas de los comerciales");
			System.out.println(" 3 - Ventas totales de cada comercial");
			System.out.println(" 4 - Trimestre con mayores ventas");
			System.out.println(" 5 - Listado de comerciales ordenados por ventas de un trimestre");
			System.out.println(" 6 - Salir\n");
 
			try {
				System.out.println("Escribe una de las opciones: ");
				opcion = sc.nextInt();
 
				switch (opcion) {
				case 1:
					ingresoComercial();
 
					break;
				case 2:
					break;
				case 3:
					break;
				case 4:
					break;
				case 5:
					break;
				case 6:
					salir = true;
					break;
				default:
					System.out.println("Solo números entre 1 y 6");
				}
			} catch (Exception e) {
				// TODO Bloque catch generado automáticamente
				System.out.println("Debes insertar un número");
				sc.next();
			} // fin catch
 
		} // si es distinto de salir
 
	}// fin metodo main
 
	private static void ingresoComercial() {
		Scanner sc = new Scanner(System.in);
 
		String cif, nombre, apellidos;
		int trimestres[] = {1,2,3,4};
		String[] nombreComercial; //posteriormente se almacenará el nombre del comercial en un array unidmensional de cadenas
 
			// crear array de objetos Comerciales
			// crear un array de 10 filas por 4 columnas
			Comerciales[][] comercial = new Comerciales[FILAS][COLUMNAS];
 
		for (int i = 0; i < FILAS; i++) {
 
			System.out.println("Introduzca CIF: ");
			cif = sc.nextLine();
			System.out.println("Introduzca Nombre: ");
			nombre = sc.nextLine();
			//nombreComercial[] = nombre;
 			System.out.println("Introduzca Apellidos: ");
			apellidos = sc.nextLine();
			for(int j=0;j<4;i++) {
			System.out.println("Introduzca trimestres (1,2,3,4): ");
			trimestres[j] = sc.nextInt();
			}
 
		}
		sc.nextLine(); // liberar la memoria
 
		//INICIALIZAR EL CONSTRUCTOR CON LAS VARIABLES ANTERIORES
 
 
		//MOSTRAR EL RESULTADO
 
 
	}
 
}// fin clase Ventas
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 26/01/2021 20:39:40
Mi modificación del metodo añadir y que todavía no me sale pero creo que me voy acercando....................

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
private static void ingresoComercial() {
    Scanner sc = new Scanner(System.in);
 
    String cif, nombre, apellidos;
    int trimestres[] = { 1, 2, 3, 4 };
    String[] nombreComercial = new String[10]; // posteriormente se almacenará el nombre del
    // comercial en un array unidimensional de cadena
 
    // crear array de objetos Comerciales
    // crear un array de 10 filas por 4 columnas
    Comerciales[][] comercial = new Comerciales[FILAS][COLUMNAS];
    for (int FILAS = 0; FILAS < comercial.length; FILAS++) {
 
        System.out.println("Introduzca CIF: ");
        cif = sc.nextLine();
        System.out.println("Introduzca Nombre: ");
        nombre = sc.nextLine();
        nombreComercial[FILAS] = nombre;
        System.out.println("Introduzca Apellidos: ");
        apellidos = sc.nextLine();
        for (int COLUMNAS = 1; COLUMNAS <= comercial[FILAS].length; COLUMNAS++) {
            System.out.println("Introduzca trimestres (1,2,3,4): ");
            trimestres[FILAS] = sc.nextInt();
 
        }
        sc.nextLine(); // liberar la memoria
        comercial[FILAS][COLUMNAS] = new Comerciales(nombreComercial[FILAS], trimestres[COLUMNAS]);
    }
 
    // RECORRER LA CADENA
 
    // MOSTRAR EL RESULTADO
 
}
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

Array bidimensional y Metodo añadir

Publicado por Kabuto (1381 intervenciones) el 27/01/2021 00:58:44
Hola Antonio.

La verdad es que el enunciado es bastante confuso sobre si las constantes FILAS y COLUMNAS deben ser estáticas o no...
Creo medio entender que lo que no deben ser "estáticos y globales" son los arrays (que en realidad lo ideal es que sí lo fueran) pero sobre las constantes no dice nada.
De todos modos, los arrays si los declaramos directamente dentro del método main(), no serán globales, pero serán estáticos, porque el método main(), es estático también...
Así que yo no perdería mucho tiempo en entender que nos quieren decir con lo de "no ser estático", porque me parece que el que escribió el enunciado, tampoco lo tiene muy claro xD

Yo dejaría las constantes FILA y COLUMNA tal cuál las has puesto, y los arrays los declararía dentro del método main(), nada más empezar, para cumplir con "lo de no ser globales"

Por cierto, respecto al enunciado.
Si es este...
1
2
3
4
5
6
7
8
9
Descomposición del ejercicio (la información se almacena en un array):
• Array de dos dimensiones (10, 4). Los arrays no serán declarados como globales y estáticos
• La primera dimensión (comercial) y segunda dimensión (trimestre) representarán las ventas
de los 10 comerciales durante los cuatro trimestres del año. Las dos dimensiones serán constantes.
• En otro vector de cadenas (array de cadena) se almacenará los 10 comerciales. String [] comerciales
• Menú con 6 opciones. Cada opción es un método independiente
• Se puede modificar cambiar el número de comerciales o el número de trimestres.
 Codificcar para que no se tenga que cambiar ninguna línea de código.
 Usar las constantes del array bidimensional como FILAS y COLUMNAS para almacenar 10 y 4.

..entonces me parece que lo estás haciendo más complicado de lo que se pide.

Tú has creado una clase Comerciales, pero, ¿dónde te piden que hagas tal cosa?

Parece que respecto a los comerciales, solo se va a pedir un nombre (nada de CIF o apellidos) que se guardará en un array unidimensional de clase String
1
• En otro vector de cadenas (array de cadena) se almacenará los 10 comerciales. String [] comerciales

Y respecto las ventas trimestrales, estas van en la matriz de 10x4, una matriz que puede ser tipo int o double.

No parece que haya que crear ninguna clase Comercial, a no ser que por propia iniciativa quieras hacerlo más complejo de lo que se pide.

Pero en principio, solo necesitas un array de 10 Strings y una matriz de 10x4 double/int.

De ese modo, los comerciales se relacionan con sus ventas trimestrales de este modo:

1
2
3
4
5
6
7
8
9
10
11
12
13
String[] comerciales                               double[][] ventas
-----------------------                           --------------------
 
comerciales[0]           --------------------->      ventas[0][0], ventas[0][1], ventas[0][2], ventas[0][3]
comerciales[1]           --------------------->      ventas[1][0], ventas[1][1], ventas[1][2], ventas[1][3]
comerciales[2]           --------------------->      ventas[2][0], ventas[2][1], ventas[2][2], ventas[2][3]
comerciales[3]           --------------------->      ventas[3][0], ventas[3][1], ventas[3][2], ventas[3][3]
comerciales[4]           --------------------->      ventas[4][0], ventas[4][1], ventas[4][2], ventas[4][3]
comerciales[5]           --------------------->      ventas[5][0], ventas[5][1], ventas[5][2], ventas[5][3]
comerciales[6]           --------------------->      ventas[6][0], ventas[6][1], ventas[6][2], ventas[6][3]
comerciales[7]           --------------------->      ventas[7][0], ventas[7][1], ventas[7][2], ventas[7][3]
comerciales[8]           --------------------->      ventas[8][0], ventas[8][1], ventas[8][2], ventas[8][3]
comerciales[9]           --------------------->      ventas[9][0], ventas[9][1], ventas[9][2], ventas[9][3]

Decide si quieres hacerlo como parece indicar el enunciado, o en tu versión "complicada".

En cualquier caso, has de tener en cuenta que los arrays se han de declarar dentro del método main(), al principio de todo.

He visto que los arrays lo estás declarando dentro del método ingresoComercial()
Eso no te servirá, pues esos arrays SOLO existen dentro de dicho método.
Es decir, cuando ese método finalice su tarea y el flujo del programa regrese al main(), esos arrays desaparecerán, dejarán de existir, porque su ámbito se limita al interior (y existencia) del bloque de código donde son declarados.
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 30/01/2021 11:56:41
hola
Gracias por responder. No he podido leerlo antes.
La verdad que lo que tengo muy confuso son los arrays bidimensionales. En este caso es un array bidimensional pero también aparece un array unidimensional de string.
Hay aspectos del ejeercicio que lo estoy valorando pero al final me da problemas y no sé por donde hincar el diente. Leeré de nuevo tus anotaciones y reflexionare sobre el ejerciico creo que me va saliendo pero hay aspectos puntuales que me quedan dudosos y eso me impide avanzar porque realmente he vuelto a modificar el metodo añadir pero me va quedando errores por pulir. jeje

Un saludo!!
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 30/01/2021 13:24:50
En el ejercicio en la parte 1 no me pide crear la clase Comerciales. Pero no sé como enfocarlo si no creo la clase Comerciales. Porque si no es necesario crear la clase Comerciales y solo se necesita crear la clase Principal, ENTONCES TODO EL CODIGO ES EN UNA CLASE???

Mi problema es la confusión con respecto al ejercicio del array BIDIMENSIONAL que me raya un poco. En la parte 1 no me especifica la clase Comerciales ni que se guarde en un ArrayList sino en un array bidimensional.
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

Array bidimensional y Metodo añadir

Publicado por Kabuto (1381 intervenciones) el 31/01/2021 00:15:32
El array bidimensional solo va a contener las ventas.
El array unidimensional solo va a tener los nombres de los comerciales que hacen las ventas.

Te repito esta asociación, entre los dos arrays:

1
2
3
4
5
6
7
8
9
10
11
12
13
String[] comerciales                               double[][] ventas
-----------------------                           --------------------
 
comerciales[0]           --------------------->      ventas[0][0], ventas[0][1], ventas[0][2], ventas[0][3]
comerciales[1]           --------------------->      ventas[1][0], ventas[1][1], ventas[1][2], ventas[1][3]
comerciales[2]           --------------------->      ventas[2][0], ventas[2][1], ventas[2][2], ventas[2][3]
comerciales[3]           --------------------->      ventas[3][0], ventas[3][1], ventas[3][2], ventas[3][3]
comerciales[4]           --------------------->      ventas[4][0], ventas[4][1], ventas[4][2], ventas[4][3]
comerciales[5]           --------------------->      ventas[5][0], ventas[5][1], ventas[5][2], ventas[5][3]
comerciales[6]           --------------------->      ventas[6][0], ventas[6][1], ventas[6][2], ventas[6][3]
comerciales[7]           --------------------->      ventas[7][0], ventas[7][1], ventas[7][2], ventas[7][3]
comerciales[8]           --------------------->      ventas[8][0], ventas[8][1], ventas[8][2], ventas[8][3]
comerciales[9]           --------------------->      ventas[9][0], ventas[9][1], ventas[9][2], ventas[9][3]

El comercial cuyo nombre está en la posición [0]...,
ha realizado las 4 ventas que en la matriz se guardan en [0][0], [0][1], [0][2], [0][3].

El comercial cuyo nombre está en la posición [1]...,
ha realizado las 4 ventas que en la matriz se guardan en [1][0], [1][1], [1][2], [1][3].

Y así sucesivamente...


Entonces, por ejemplo, si yo quiero saber la ventas Fulgencio Antúnez, pues buscaría en que posición del array unidimensional se encuentra Fulgencio.

Supongamos que está en la posición [7], pues entonces ya se que sus ventas son las que se encuentran en las posiciones [7][0], [7][1], [7][2], [7][3] del array bidimensional.


El programa se va a basar en esto, en saber relacionar los dos arrays.

No se necesita una clase Comerciales. Si fuera un programa destinado al mundo real, obviamente una clase Comercial sería lo idóneo. Pero en este caso es un ejercicio destinado a practicar cómo trabajar con arrays de distintas dimensiones en un mismo programa.

Sí, el código puede hacerse todo en una sola clase, la principal.
Lo importante es comprender como relacionar ambos arrays.

Y verás que es más sencillo de lo que parece.

Sigue intentándolo, si no consigues ver la luz ;-) , te ayudaremos mostrando algún código.

Un saludo.
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 31/01/2021 17:57:59
Gracias por responderme.

Si ya veo que mi problema era como ver la relación entre el array unidimensional y el array bidimensional y estaba rayándome demasiado con el ejercicio.
Gracias a tus explicaciones comprendo bastante mejor el array bidimensional.
Sí conseguiré hacer el ejercicio aunque tarde algo. Voy a seguir intentándolo y con lo que tenga lo pongo por aquí.

Un saludo y muchas gracias!!!
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 02/02/2021 18:31:26
Hola!!
Creo que al final he tenido que reestructurar el codigo. Pero ahora me va surgiendo nuevas dudas.

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
/**
 * APLICACIÓN DE GESTIÓN DE COMERCIALES
 *
 * Notas
 * solo necesitas un array de 10 Strings y una matriz de 10x4 double/int.
 * No deben ser estáticos ni globales los arrays
 *
 * Saber relacionar array unidimensional y el array bidimensional en un mismo programa
 *
 *
 * En la opción 2 se pedirán los datos con el siguiente formato:
 * Comercial Ramón Sánchez Carrero
 * Trimestre 1: 23456
 * Trimestre 2: 34455
 */
package supuesto1;
 
import java.util.Scanner;
 
/**
 * @author Antonio
 *
 */
public class Comerciales1 {
 
	// importamos clase necesaria
	static Scanner lector = new Scanner(System.in);
 
	// constantes del array
	final static int FILAS = 10;
	final static int COLUMNAS = 4;
 
	// atributos
	static String[] cifA = new String[FILAS];
	// el array unidimensional de nombreCompleto[] solo va a a tener los nombres de los comerciales que
	// hacen las ventas
	static String[] nombreCompleto = new String[FILAS];// nombre + apellidos
	// nombreCompleto[0] = "Juan Sánchez Cortés";
	int[] trimestres = { 1, 2, 3, 4 }; // trimestre 1, trimestre 2, trimestre 3, trimestre 4
	// trimestres[0] = 1...
 
 
 
	/**
	 * agregar comerciales agrega cif y nombre y apellidos del comercial
	 */
	private static void agregarComerciales() {
		System.out.println("Introduzca nuevos comerciales en la aplicación: ");
		// cif, nombre
		String cif = "";
		String nombre = "";
		// recorrer la cadena e introducir datos
		for (int i = 0; i < FILAS; i++) {
			Scanner lector = new Scanner(System.in);
			System.out.println("COMERCIAL " + (i + 1) + ": ");
			System.out.println("Introduzca CIF del comercial: ");
			cif = lector.next();
			cifA[i] = cif;
			System.out.println("Introduzca NOMBRE y APELLIDOS del COMERCIAL: ");
			nombre = lector.next();
			nombreCompleto[i] = nombre;
 
		}
 
	}// fin metodo agregarComerciales()
 
	/**
	 * Muestra el resultado del array introducido en la opción 1
	 * Queda agregar más datos al metodo...
	 */
	private static void listarComerciales() {
		// mostrar el resultado del array unidimensional nombreCompleto[]
 
		for (int i = 0; i < 10; i++) {
			//String[] cifA = new String[10];
			System.out.println("COMERCIAL" + " " + (i + 1));
			System.out.println(cifA[i] + " " + nombreCompleto[i]);
		}
 
	}
 
	/**
	 *
	 * @param args
	 */
	public static void main(String[] args) {
 
		System.out.println("BIENVENIDOS A LA APLICACIÓN DE GESTIÓN DE VENTAS DE NUESTROS COMERCIALES");
		// LOS COMERCIALES SE RELACIONAN CON SUS VENTAS TRIMESTRALES
		// crear la matriz de 10 x 4 (comerciales x trimestres)
		// el array bidimensional se va a relacionar con las ventas
		// solo van a contener las ventas
		int[][] ventas = new int[10][4]; // filas por columnas
		int opcion = 0;
		do {
			// hacer menu con do...while...
			System.out.println("-------MENÚ PRINCIPAL--------");
			System.out.println("1.- entrada de los nombres de los comerciales");
			System.out.println(
					"2.- entrada de las ventas de los comerciales (decidir que se entrarán las ventas mensuales");
			System.out.println("3.- ventas totales de cada comercial");
			System.out.println("4.- trimestre con mayores ventas");
			System.out.println("5.- listado de comerciales ordenados por ventas de un trimestre");
			System.out.println("6.- salir");
			System.out.println("-----------------------------");
 
			System.out.println("ELIJE UNA OPCIÓN: ");
			opcion = lector.nextInt();
			switch (opcion) {
			case 1:
 
				agregarComerciales();
				break;
			case 2:
				System.out.println("entrar las ventas de los comerciales");
				break;
			case 3:
				break;
			case 4:
				break;
			case 5:
				System.out.println("Listado de comerciales ordenados por ventas de un trimestre");
				listarComerciales();
				break;
			case 6:
				System.exit(0);
				break;
 
			}// fin switch
		} while (opcion >= 1 || opcion <= 6);
 
	}// metodo estatico main
 
}// fin clase Comerciales
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 02/02/2021 18:33:27
Hola de nuevo!!!
Las constantes FILAS y COLUMNAS no deben ser estáticas según el enunciado pero a mí me aparece estática. Si no las pongo estática, me sale error. Eso es una DUDA que tengo.


Como al final solo voy a crear la clase Comerciales1, he puesto los atributos de la clase Comerciales1 antes de metodo main y no dentro del metodo main ya que luego debo crear varios metodos de la clase Comerciales1 que usen los atributos de la clase.

Otro aspecto que me doy cuenta es que, aunque en el enunciado me pone que cree un array unidimensional de String y una matriz de ventas ddonde se relacione el nombre de los comerciales con el número de ventas mensuales, también necesito guardar más elementos de los Comerciales como cif y trimestres con lo que todos los atributos de Comerciales los voy a crear como arrays unidimensionales para almacenar los datos de Comerciales. No sé si estaría mal enfocado en programación.

EL MÉTODO AÑADIR LE TENGO CREADO Y CREO QUE ES UNA FORMA DE HACERLO ENTRE MUCHAS QUE SE PUEDAN HACER.
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

Array bidimensional y Metodo añadir

Publicado por Kabuto (1381 intervenciones) el 03/02/2021 00:31:00
Sobre FILA y COLUMNA, no le des más vueltas, han de ser estáticas sí o sí.

¿Por qué ibas a necesitar el CIF?
El enunciado no lo pide, así que no lo necesitas. Ahora bien, tampoco pasa nada si quieres incluirlo y enriquecer el ejercicio.

Lo que sí que no entiendo es lo "de los trimestres".
1
int[] trimestres = { 1, 2, 3, 4 };

Ahí estás guardando el valor 1, el 2, el 3 y el 4.

Lo que se te pide son guardar las ventas trimestrales. (no mensuales, trimestrales)
Y para eso está la matriz, para guardar las ventas que cada uno de los 10 comerciales ha hecho, en cada uno de los 4 trimestres que tiene un año.
Por eso se pide una matriz de 10x4 -> 10 empleados, 4 trimestres cada uno.


Mira, voy a compartir un código donde básicamente cojo tu primer programa que pusiste y añado tres métodos para las tres primeras opciones del menú.
Los arrays los declaro dentro del main para cumplir con esta premisa:
1
• Array de dos dimensiones (10, 4). Los arrays no serán declarados como globales y estáticos
Al declararlos dentro del main, NO serán globales, lo cuál obliga a que los métodos que trabajen con ellos los tengan que recibir por argumentos entre los paréntesis.

Para la segunda opción, la de insertar las ventas, implica introducir 40 ventas por teclado para llenar la matriz de 10x4.
Es una barbaridad tener que hacer esto cada vez que queremos probar el programa, así que las líneas para leer por teclado las he puesto como comentario y he añadido otras para que las ventas se inserten con valores aleatorios mediante un objeto Random.
Así el proceso es automático.

Si se quiere hacer por teclado, basta con comentar las líneas que usan el objeto Random y descomentar las líneas que usan el objeto Scanner para leer por teclado.

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import java.util.Random;
import java.util.Scanner;
 
public class Principal {
	// importamos las clases necesarias
	static Scanner sc = new Scanner(System.in);
 
	// constantes de las dimensiones del array10.4. EN EL ENUNCIADO PONE QUE NO PUEDE SER ESTÁTICA.
	final static int FILAS = 10; // numero de comerciales
	final static int COLUMNAS = 4; // numero de trimestres
 
	public static void main(String[] args) {
 
		String[] comerciales = new String[FILAS];
		int[][] ventas = new int[FILAS][COLUMNAS];
 
		boolean salir = false;
		int opcion; // guardaremos la opción del usuario
 
		System.out.println("BIENVENIDO A NUESTRA APLICACIÓN DE REGISTRO Y GESTIÓN DE VENTAS");
 
		// hacer tal instrucciones si es distinto de false
		while (!salir) {// salir es false y while ejecuta instrucciones si while es distinto de false
			System.out.println("\n");
			System.out.println(" 1 - Entrada de los nombres de los comerciales");
			System.out.println(" 2 - Entrada de las ventas de los comerciales");
			System.out.println(" 3 - Ventas totales de cada comercial");
			System.out.println(" 4 - Trimestre con mayores ventas");
			System.out.println(" 5 - Listado de comerciales ordenados por ventas de un trimestre");
			System.out.println(" 6 - Salir\n");
 
			try {
				System.out.println("Escribe una de las opciones: ");
				opcion = Integer.parseInt(sc.nextLine());
 
				switch (opcion) {
				case 1:
					ingresoComercial(comerciales);
					break;
				case 2:
					ingresoVentas(comerciales, ventas);
					break;
				case 3:
					ventasTotales(comerciales, ventas);
					break;
				case 4:
					//En construcción
					break;
				case 5:
					//En construcción
					break;
				case 6:
					salir = true;
					break;
				default:
					System.out.println("Solo números entre 1 y 6");
				}
			} catch (Exception e) {
				// TODO Bloque catch generado automáticamente
				System.out.println("Debes insertar un número");
			} // fin catch
 
		} // si es distinto de salir
 
	}// fin metodo main
 
	private static void ingresoComercial(String[] arrayComerciales) {
		for (int i = 0; i < FILAS; i++) {
 
			System.out.println("\nComercial #" + (i + 1) +"/10");
			System.out.print("Introduzca Nombre: ");
			arrayComerciales[i] = sc.nextLine();
 
		}
 
	}
 
	private static void ingresoVentas(String[] arrayComerciales, int[][] arrayVentas) {
 
		//Random para automatizar entrada de ventas y agilizar la prueba del codigo
		//Comentar estas lineas para poder insertar mediante teclado
		Random rnd = new Random();
		System.out.println("Modo automático");
 
		for (int i = 0; i < FILAS; i++) {
			System.out.println("\nIngrese las ventas del Comercial: " + arrayComerciales[i]);
			for (int j = 0; j < COLUMNAS; j++) {
				System.out.println("Trimestre #" + (j+1) + "/4");
				//System.out.print("Ventas: ");
				//arrayVentas[i][j] = Integer.parseInt(sc.nextLine());
				arrayVentas[i][j] = rnd.nextInt(10000) + 15000;
				System.out.println("Valor automático: " + arrayVentas[i][j]);
			}
		}
	}
 
	private static void ventasTotales(String[] arrayComerciales, int[][] arrayVentas) {
 
		System.out.println("\nVentas totales de cada vendedor:");
		for (int i = 0; i < FILAS; i++) {
			//Mostramos nombre de comercial
			System.out.print("- " + arrayComerciales[i] + " ---> ");
			//Sumamos sus ventas
			int totalVentas = 0;
			for (int j = 0; j < COLUMNAS; j++)
				totalVentas += arrayVentas[i][j];
			//Mostramos la suma
			System.out.println(totalVentas + "€");
		}
 
	}
 
}

Si ejecutamos el programa, podemos introducir los 10 nombres, generar automáticamente las ventas trimestrales de cada uno y luego consultar el total de ventas de cada comercial (la sumas de sus 4 ventas trimestrales):
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
BIENVENIDO A NUESTRA APLICACIÓN DE REGISTRO Y GESTIÓN DE VENTAS
 
 
 1 - Entrada de los nombres de los comerciales
 2 - Entrada de las ventas de los comerciales
 3 - Ventas totales de cada comercial
 4 - Trimestre con mayores ventas
 5 - Listado de comerciales ordenados por ventas de un trimestre
 6 - Salir
 
Escribe una de las opciones:
1
 
Comercial #1/10
Introduzca Nombre: Luis
 
Comercial #2/10
Introduzca Nombre: Sara
 
Comercial #3/10
Introduzca Nombre: Ramon
 
Comercial #4/10
Introduzca Nombre: Beatriz
 
Comercial #5/10
Introduzca Nombre: Jorge
 
Comercial #6/10
Introduzca Nombre: Eva
 
Comercial #7/10
Introduzca Nombre: David
 
Comercial #8/10
Introduzca Nombre: Laura
 
Comercial #9/10
Introduzca Nombre: Enrique
 
Comercial #10/10
Introduzca Nombre: Ana
 
 
 1 - Entrada de los nombres de los comerciales
 2 - Entrada de las ventas de los comerciales
 3 - Ventas totales de cada comercial
 4 - Trimestre con mayores ventas
 5 - Listado de comerciales ordenados por ventas de un trimestre
 6 - Salir
 
Escribe una de las opciones:
2
Modo automático
 
Ingrese las ventas del Comercial: Luis
Trimestre #1/4
Valor automático: 22562
Trimestre #2/4
Valor automático: 17070
Trimestre #3/4
Valor automático: 20056
Trimestre #4/4
Valor automático: 19829
 
Ingrese las ventas del Comercial: Sara
Trimestre #1/4
Valor automático: 17785
Trimestre #2/4
Valor automático: 20784
Trimestre #3/4
Valor automático: 19999
Trimestre #4/4
Valor automático: 24318
 
Ingrese las ventas del Comercial: Ramon
Trimestre #1/4
Valor automático: 19064
Trimestre #2/4
Valor automático: 19757
Trimestre #3/4
Valor automático: 19761
Trimestre #4/4
Valor automático: 19874
 
Ingrese las ventas del Comercial: Beatriz
Trimestre #1/4
Valor automático: 16347
Trimestre #2/4
Valor automático: 18771
Trimestre #3/4
Valor automático: 17802
Trimestre #4/4
Valor automático: 24906
 
Ingrese las ventas del Comercial: Jorge
Trimestre #1/4
Valor automático: 20778
Trimestre #2/4
Valor automático: 24202
Trimestre #3/4
Valor automático: 24396
Trimestre #4/4
Valor automático: 15778
 
Ingrese las ventas del Comercial: Eva
Trimestre #1/4
Valor automático: 24456
Trimestre #2/4
Valor automático: 22350
Trimestre #3/4
Valor automático: 20265
Trimestre #4/4
Valor automático: 19988
 
Ingrese las ventas del Comercial: David
Trimestre #1/4
Valor automático: 16859
Trimestre #2/4
Valor automático: 19624
Trimestre #3/4
Valor automático: 17418
Trimestre #4/4
Valor automático: 18271
 
Ingrese las ventas del Comercial: Laura
Trimestre #1/4
Valor automático: 21595
Trimestre #2/4
Valor automático: 22984
Trimestre #3/4
Valor automático: 16444
Trimestre #4/4
Valor automático: 21763
 
Ingrese las ventas del Comercial: Enrique
Trimestre #1/4
Valor automático: 15779
Trimestre #2/4
Valor automático: 16064
Trimestre #3/4
Valor automático: 21642
Trimestre #4/4
Valor automático: 21260
 
Ingrese las ventas del Comercial: Ana
Trimestre #1/4
Valor automático: 23685
Trimestre #2/4
Valor automático: 15120
Trimestre #3/4
Valor automático: 21269
Trimestre #4/4
Valor automático: 21465
 
 
 1 - Entrada de los nombres de los comerciales
 2 - Entrada de las ventas de los comerciales
 3 - Ventas totales de cada comercial
 4 - Trimestre con mayores ventas
 5 - Listado de comerciales ordenados por ventas de un trimestre
 6 - Salir
 
Escribe una de las opciones:
3
 
Ventas totales de cada vendedor:
- Luis ---> 79517€
- Sara ---> 82886€
- Ramon ---> 78456€
- Beatriz ---> 77826€
- Jorge ---> 85154€
- Eva ---> 87059€
- David ---> 72172€
- Laura ---> 82786€
- Enrique ---> 74745€
- Ana ---> 81539€
 
 
 1 - Entrada de los nombres de los comerciales
 2 - Entrada de las ventas de los comerciales
 3 - Ventas totales de cada comercial
 4 - Trimestre con mayores ventas
 5 - Listado de comerciales ordenados por ventas de un trimestre
 6 - Salir
 
Escribe una de las opciones:
6
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 04/02/2021 20:53:15
Hola
Gracias por contestarme!!
Yo lo he hecho así. Luego veré las anotaciones.
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
package supuesto1;
 
import java.util.Scanner;
 
/**
 * @author Antonio
 *
 */
public class Comerciales1 {
 
	// importamos clase necesaria
	static Scanner lector = new Scanner(System.in);
 
	// constantes del array
	final static int FILAS = 10;
	final static int COLUMNAS = 4;
 
	// atributos
	static String[] cifA = new String[FILAS];
	// el array unidimensional de nombreCompleto[] solo va a a tener los nombres de los comerciales que
	// hacen las ventas
	static String[] nombreCompleto = new String[FILAS];// nombre + apellidos
	// nombreCompleto[0] = "Juan Sánchez Cortés";
	int[] trimestres = { 1, 2, 3, 4 }; // trimestre 1, trimestre 2, trimestre 3, trimestre 4
	// trimestres[0] = 1...
 
 
 
	/**
	 * agregar comerciales agrega cif y nombre y apellidos del comercial
	 */
	private static void agregarComerciales() {
		System.out.println("Introduzca nuevos comerciales en la aplicación: ");
		// cif, nombre
		String cif = "";
		String nombre = "";
		// recorrer la cadena e introducir datos
		for (int i = 0; i < FILAS; i++) {
			Scanner lector = new Scanner(System.in);
			System.out.println("COMERCIAL " + (i + 1) + ": ");
			System.out.println("Introduzca CIF del comercial: ");
			cif = lector.next();
			cifA[i] = cif;
			System.out.println("Introduzca NOMBRE y APELLIDOS del COMERCIAL: ");
			nombre = lector.next();
			nombreCompleto[i] = nombre;
 
		}
 
	}// fin metodo agregarComerciales()
 
	/**
	 * Consultar comerciales si está añadido a nuestra aplicación
	 */
	private static boolean consultarComercial(String nombre) {
 
		Scanner lector = new Scanner(System.in);
		boolean consultar = false; //el resultado de la consulta es negativo o posición -1
		int posicion = -1;
		//System.out.println("Introduzca nombre del Comercial: ");
		//nombre = lector.next();
		//ver si coincide el nombre del metodo con alguna posición del array nombreCompleto[i]
 
		for(int i=0; i<nombreCompleto.length;i++) {
			if(nombre.equals(nombreCompleto[i])) {
				posicion = i;
			}
 
		}
 
		if(posicion != -1) {
			System.out.println("El comercial de nombre " + nombre + " existe. ");
			return consultar = true;
		}
		else {
			System.out.println("El comercial de nombre " + nombre + " no existe... ");
			}
		return consultar;
 
 
	}
 
	/**
	 * Metodo para añadir las ventas de los comerciales
	 * (decidir que se entrarán las ventas mensuales")
	 */
	private static void ventasComerciales() {
		Scanner lector = new Scanner(System.in);
		System.out.println("Entrar las ventas de los comerciales");
		String nombreVentas = " ";
		System.out.println("Introduzca el nombre del comercial a buscar: ");
		nombreVentas = lector.next();
		consultarComercial(nombreVentas);
		if(consultarComercial(nombreVentas) == true) {
			//añadir el registro
			nombreCompleto[FILAS] = nombreVentas;
		}
		else {
			//introducir uno nuevo
			System.out.println("Introduzca el nombre de nuevo: ");
			nombreVentas = lector.next();
			//--------------------------------------------problema
			nombreCompleto[FILAS] = nombreVentas;
		}
	}//fin metodo ventasComerciales
	/**
	 * Muestra el resultado del array introducido en la opción 1
	 * Queda agregar más datos al metodo...
	 */
	private static void listarComerciales() {
		// mostrar el resultado del array unidimensional nombreCompleto[]
		for (int i = 0; i < 10; i++) {
			//String[] cifA = new String[10];
			System.out.println("COMERCIAL" + " " + (i + 1));
			System.out.println(cifA[i] + " " + nombreCompleto[i]);
		}
	}
	private static void ordenarComerciales() {
	}//fin metodo ordenarComerciales()
	/**
	 *
	 * @param args
	 */
	public static void main(String[] args) {
		System.out.println("BIENVENIDOS A LA APLICACIÓN DE GESTIÓN DE VENTAS DE NUESTROS COMERCIALES");
		// LOS COMERCIALES SE RELACIONAN CON SUS VENTAS TRIMESTRALES
		// crear la matriz de 10 x 4 (comerciales x trimestres)
		// el array bidimensional se va a relacionar con las ventas
		// solo van a contener las ventas
		int[][] ventas = new int[10][4]; // filas por columnas
		int opcion = 0;
		do {
			// hacer menu con do...while...
			System.out.println("-------MENÚ PRINCIPAL--------");
			System.out.println("1.- entrada de los nombres de los comerciales");
			System.out.println(
					"2.- entrada de las ventas de los comerciales (decidir que se entrarán las ventas mensuales");
			System.out.println("3.- ventas totales de cada comercial");
			System.out.println("4.- trimestre con mayores ventas");
			System.out.println("5.- listado de comerciales ordenados por ventas de un trimestre");
			System.out.println("6.- salir");
			System.out.println("-----------------------------");
			System.out.println("ELIJE UNA OPCIÓN: ");
			opcion = lector.nextInt();
			switch (opcion) {
			case 1:
				agregarComerciales();
				break;
			case 2:
				ventasComerciales();
				break;
			case 3:
				System.out.println("Listado de las ventas totales de cada comercial");
				break;
			case 4:
				System.out.println("Listado de los trimestres con mayores ventas: trimestre 1, trimestre 2, trimestre 3, trimestre 4");
				break;
			case 5:
				System.out.println("Listado de comerciales ordenados por ventas de un trimestre");
				System.out.println("-----------------------------------------------------------");
				listarComerciales();
				System.out.println("-----------------------------------------------------------");
				break;
			case 6:
				System.exit(0);
				break;
			/*
			 * default:
			 * System.out.println("Por favor introduzca una opción válida entre 1 y 6");
			 */
			}// fin switch
		} while (opcion >= 1 || opcion <= 6);
	}// metodo estatico main
}// fin clase Comerciales

Yo ahora estoy trabajando en el metodo ventasComerciales(). Voy a ver como lo has enfocado. Aunque no se si mi manera de enfocar el agregar Comercial es correcto. Aunque he probado que el resultado es correcto en agregar Comercial y listar Comercial.

Con respecto al cif no lo pedía en este supuesto pero lo he querido añadir. Mas bien me lo pedía en otro ejercicio.

El metodo consultarComercial creo que tambien funciona aunque el metodo añadir las ventas me estoy rayando porque acabo de leer tus annotaciones anteriores nuevas.

Con respecto al array de trimestre, me refería al trimestre 1, al trimestre 2, al trimestre 3 y al trimestre 4. Aunque en el ejerciico te piden ventas mensuales. Es otra variable que tengo dudas y quizás por eso me falla el metodo ventasComerciales().
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 04/02/2021 21:30:49
No estoy muy seguro pero si se realiza un método con parámetros es porque voy a poner variables locales y no variables de clase??? Es que me enfoque en hacer variables de clase pero siempre me pedía metodos sin parámetros en mi código y veo que en tu código hiciste variables locales (dentro del metodo main) y luego usaste metodos con parámetros.
Perdón soy programador que estoy empezando aún y necesito ver algunos detalles para dejar de estar bloqueado en java.

Con respecto al array de trimestres, estuve asimilando tus anotaciones y creo que tengo algo de duda. En el enunciado decía:

1
2
3
4
5
6
7
8
9
10
En la opción 2 se pedirán los datos con el siguiente formato:
Comercial Nombre Apellido 1 Apellido 2
Trimestre 1: 23456
Trimestre 2: 34455
 
-------------------------
 
Comercial Otro Nombre Apellido 1 Apellido 2
Trimestre 1: 23456
Trimestre 2: 34455

Yo en principio interpreté que en los 4 trimestres, te pedía número de ventas de cada comercial. Por ejemplo trimestre 1: tenía 2 ventas 3 ventas 4 ventas 5 ventas 6 ventas. Pero no entendía a lo que quería decir exactamente.
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

Array bidimensional y Metodo añadir

Publicado por Kabuto (1381 intervenciones) el 05/02/2021 00:29:22
Tu método para agregar nombres es correcto.
Solo comentar que te puedes ahorrar algunas líneas de código asignando la lectura del Scanner directamente a los arrays, sin necesidad de utilizar una variable como "intermediaria".

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
private static void agregarComerciales() {
    System.out.println("Introduzca nuevos comerciales en la aplicación: ");
    // cif, nombre
    String cif = "";
    String nombre = "";
    // recorrer la cadena e introducir datos
    for (int i = 0; i < FILAS; i++) {
        Scanner lector = new Scanner(System.in);
        System.out.println("COMERCIAL " + (i + 1) + ": ");
        System.out.println("Introduzca CIF del comercial: ");
        cif = lector.next();
        cifA[i] = lector.next();
        System.out.println("Introduzca NOMBRE y APELLIDOS del COMERCIAL: ");
        nombre = lector.next();
        nombreCompleto[i] = lector.next();
 
    }

Pero vamos, simplemente es por ahorrar unas líneas. El programa va a funcionar igual de una forma o de otra, así que hazlo como más cómodo te sientas o como pienses que es más legible.


Sobre los arrays que yo declaré, los hice locales porque el enunciado pedía que no fueran globales:
1
• Array de dos dimensiones (10, 4). Los arrays no serán declarados como globales y estáticos
Debido a esto, tenemos el inconveniente de que los métodos de la clase no pueden "ver" esos arrays por estar en ámbitos distintos, y por tanto hay que pasarles una referencia por los paréntesis.

Lo normal sería declararlos globales, como tú has hecho, pero en este ejercicio pedían hacerlo de la otra manera. Quizás para precisamente practicar con métodos que reciben referencias..., no sé...

Sobre que la interpretación de las ventas..., yo creo que se refieren, no a la cantidad de ventas realizadas, si no al monto (el dinero) que esas ventas han acumulado en cada trimestre. 10.000 euros, 25.000 euros, etc...

En realidad, tampoco es demasiado importante interpretarlo de un modo u otro. Lo importante es que sepamos hacer un programa para relacionar los datos del array de nombres con la matriz de ventas.
Si luego en la matriz tenemos valor 1, o valor 10.000, es irrelevante.

En mi método puse un Random para no tener que introducir 40 valores por teclado cada vez que iniciamos el programa.
Tiene las líneas necesarias para hacer la lectura por teclado, que es como debería quedar el programa "final", pero las marque como comentario para que el compilador las ignore y mientras el programa esté en "pruebas", se ejecuten las líneas que automatizan el proceso generando valores al azar automáticamente.
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 08/02/2021 13:42:10
Hola adjunto mi nuevo código!!
Tengo más claro el ejercicio. Ahora es cuestión de practicar con metodos con parámetros y métodos sin parámetros para ir combinando las formas de hacer los metodos.

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
package supuesto1;
 
import java.util.Scanner;
 
/**
 * @author Antonio
 *
 */
public class Comerciales1 {
 
	// importamos clase necesaria
	static Scanner lector = new Scanner(System.in);
 
	// constantes del array
	final static int FILAS = 2;
	final static int COLUMNAS = 4;
 
	// variables de clase
	static String[] cifA = new String[FILAS];
	// el array unidimensional de nombreCompleto[] solo va a a tener los nombres de
	// los comerciales que
	// hacen las ventas
	static String[] nombreA = new String[FILAS];
	static String[] apellidosA = new String[FILAS];
 
	// LOS COMERCIALES SE RELACIONAN CON SUS VENTAS TRIMESTRALES
	// crear la matriz de 10 x 4 (comerciales x ventas)
	// el array bidimensional se va a relacionar con las ventas
	// solo van a contener las ventas
	static double[][] ventas = new double[FILAS][COLUMNAS]; // filas por columnas
	// ventas[0][0] = 10.300 --> primer trimestre
	// ventas[0][1] = 10.400 --> segundo trimestre
	// ventas[0][2] = 10.200 --> tercer trimestre
	// ventas[0][3] = 10.000 --> cuarto trimestre
 
	// ventas[1][0] = 10.300 -- segundo comercial primer trimestre
 
	// ventas[2][0] = 10.300 --> tercer comercial primer trimestre
 
	/**
	 * agregar comerciales agrega cif y nombre y apellidos del comercial
	 */
	private static void agregarComerciales() {
		System.out.println("Introduzca nuevos comerciales en la aplicación: ");
 
		// recorrer la cadena e introducir datos
		for (int i = 0; i < FILAS; i++) {
			Scanner lector = new Scanner(System.in);
			System.out.println("COMERCIAL " + (i + 1) + ": ");
			System.out.println("Introduzca CIF del comercial: ");
			cifA[i] = lector.next();
			System.out.println("Introduzca NOMBRE del COMERCIAL: ");
			nombreA[i] = lector.next();
			System.out.println("Introduzca APELLIDOS del COMERCIAL: ");
			apellidosA[i] = lector.next();
 
		}
 
	}// fin metodo agregarComerciales()
 
	/**
	 * Consultar comerciales si está añadido a nuestra aplicación
	 */
	/*
	 * private static boolean consultarComercial(String nombre) {
	 *
	 * Scanner lector = new Scanner(System.in); boolean consultar = false; // el
	 * resultado de la consulta es negativo o posición -1 int posicion = -1; //
	 * System.out.println("Introduzca nombre del Comercial: "); // nombre =
	 * lector.next(); // ver si coincide el nombre del metodo con alguna posición
	 * del array // nombreCompleto[i]
	 *
	 * for (int i = 0; i < nombreCompleto.length; i++) { if
	 * (nombre.equals(nombreCompleto[i])) { posicion = i; }
	 *
	 * }
	 *
	 * if (posicion != -1) { System.out.println("El comercial de nombre " + nombre +
	 * " existe. "); return consultar = true; } else {
	 * System.out.println("El comercial de nombre " + nombre + " no existe... "); }
	 * return consultar;
	 *
	 * }
	 */
 
	/**
	 * Metodo para añadir las ventas de los comerciales
	 */
	private static void ventasComerciales() {
 
		Scanner lector = new Scanner(System.in);
		for (int i = 0; i < FILAS; i++) {
			// String[] cifA = new String[10];
			System.out.println("COMERCIAL" + " " + (i + 1) + "/" + FILAS);
			System.out.println(cifA[i] + " " + nombreA[i] + " " + apellidosA[i]);
		}
 
		System.out.println("Ingrese las ventas trimestrales de cada comercial (26000): ");
		for (int i = 0; i < FILAS; i++) {
			System.out.println("Comercial " + (i + 1) + " " + nombreA[i] + " " + apellidosA[i]);
			for (int j = 0; j < COLUMNAS; j++) {
				System.out.println("Trimestre " + (j + 1));
				ventas[i][j] = lector.nextDouble();
				// ventas[i][j] = 10000;
 
			}
		}
 
		// mostrar el resultado
		System.out.println("-----------------------------------------------------------");
		System.out.println("VENTAS TRIMESTRALES DE CADA COMERCIAL");
		System.out.println("-----------------------------------------------------------");
		for (int i = 0; i < FILAS; i++) {
			System.out.println("Comercial " + (i + 1) + " " + nombreA[i] + " " + apellidosA[i]);
			for (int j = 0; j < COLUMNAS; j++) {
				System.out.println("Trimestre " + (j + 1));
				System.out.println(ventas[i][j] + " €");
			}
		}
 
	}// fin metodo ventasComerciales
 
	/**
	 * Suma las ventas totales de cada comercial
	 *
	 */
	private static void ventasTotales() {
		System.out.println("-----------------------------------------------------------");
		System.out.println("Listado de las ventas totales de cada comercial");
		System.out.println("-----------------------------------------------------------");
 
		for (int i = 0; i < FILAS; i++) {
			double totalVentas = 0;
			// mostramos la fila comercial
			System.out.println("Comercial " + (i + 1) + " " + nombreA[i] + " " + apellidosA[i]);
			for (int j = 0; j < COLUMNAS; j++) {
 
				// suma la columna de trimestre
				totalVentas = ventas[i][j] + totalVentas;
			}
			// mostramos la suma total de cada comercial
			System.out.println(totalVentas + " €");
		}
 
	}// fin metodo ventasTotales()
 
	/**
	 *
	 */
	private static void mayoresVentas() {
		// TODO Esbozo de método generado automáticamente
		System.out.println(
				"Listado de los trimestres con mayores ventas: trimestre 1, trimestre 2, trimestre 3, trimestre 4");
 
 
	}// fin metodo mayoresVentas()
 
	/**
	 * Muestra el resultado del array introducido en la opción 1 Queda agregar más
	 * datos al metodo...
	 */
	private static void listarComerciales() {
		System.out.println("-----------------------------------------------------------");
		System.out.println("Listado de comerciales sin ordenar");
 
		for (int i = 0; i < FILAS; i++) {
			// String[] cifA = new String[10];
			System.out.println("COMERCIAL" + " " + (i + 1));
			System.out.println(cifA[i] + " " + nombreA[i] + " " + apellidosA[i]);
		}
 
	}
 
	private static void ordenarComerciales() {
 
	}// fin metodo ordenarComerciales()
 
	public static void main(String[] args) {
 
		System.out.println("BIENVENIDOS A LA APLICACIÓN DE GESTIÓN DE VENTAS DE NUESTROS COMERCIALES");
 
		int opcion = 0;
		do {
			// hacer menu con do...while...
			System.out.println("-------MENÚ PRINCIPAL--------\n"); // literal de carácter \n para espacio en blanco
			System.out.println("1.- entrada de los nombres de los comerciales");
			System.out.println(
					"2.- entrada de las ventas de los comerciales (decidir que se entrarán las ventas mensuales");
			System.out.println("3.- ventas totales de cada comercial");
			System.out.println("4.- trimestre con mayores ventas");
			System.out.println("5.- listado de comerciales ordenados por ventas de un trimestre");
			System.out.println("6.- salir");
			System.out.println("\n-----------------------------");
 
			System.out.println("ELIJE UNA OPCIÓN: ");
			// opcion = lector.nextInt();
			// conversión de string a int
			opcion = Integer.valueOf(lector.nextInt());
			switch (opcion) {
			case 1:
				agregarComerciales();
				break;
			case 2:
				ventasComerciales();
				break;
			case 3:
				ventasTotales();
				break;
			case 4:
				mayoresVentas();
 
				break;
			case 5:
 
				listarComerciales();
				System.out.println("-----------------------------------------------------------");
				System.out.println("Listado de comerciales ordenados por ventas de un trimestre");
 
				System.out.println("-----------------------------------------------------------");
				break;
			case 6:
				System.exit(0);
				break;
 
			  default:
			  System.out.println("Por favor introduzca una opción válida entre 1 y 6");
 
 
			}// fin switch
 
		} while (opcion >= 1 || opcion <= 6);
 
	}// metodo estatico main
 
}// fin clase Comerciales
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 08/02/2021 13:59:17
Anoche estuve buscando la manera en que debo hacer la opción 5 con la interfaz comparator y la interfaz comparable.
Pero ahora me voy a centrar en la lógica de cómo sacar las mayores ventas de cada comercial. En la parte 4 me pide sacar las mayores ventas de cada comercial. Es decir, si es en el trimestre 1, o trimestre 2 o trimestre 3 o trimestre 4 tienen lás máximas ventas.
Estuve viendo un array unidimensional de como sacar el maximo de una serie de números pero en este caso es un array bidimensional. Y eso me confunde.
En el mismo declaras una variable para almacenar el número máximo y luego comparas dicho variable con el recorrido del array, si es mayor la variable, entonces variable es igual a parte de ventas[i][j].

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
 * Sacar el trimestre con mayores ventas
 */
private static void mayoresVentas() {
    // TODO Esbozo de método generado automáticamente
    System.out.println(
            "Listado de los trimestres con mayores ventas: trimestre 1, trimestre 2, trimestre 3, trimestre 4");
    double maximaVenta = 0;
    for(int i=0;i<FILAS;i++) {
        for(int j=0;j<COLUMNAS;j++) {
            if(ventas[i][j] > maximaVenta ) {
                maximaVenta = ventas[i][j];
            }
        }
        //mostramos el resultado del valor mayor de cada comercial
        System.out.println("El trimestre con mayores ventas: " + maximaVenta);
    }
 
 
}// fin metodo mayoresVentas()

Creo que me ha salido el metodo para calcular el valor máximo. He configurado el ejercicio para que solo me pida 2 comerciales y así pueda comparar mejor los resultados.

Ahora me queda como conseguiría saber cual es el trimestre donde salió el valor máximo. Y ahí me desconfigura.
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

Array bidimensional y Metodo añadir

Publicado por Kabuto (1381 intervenciones) el 09/02/2021 11:30:30
La opción 4 no tengo claro del todo QUÉ está pidiendo.

No tengo el enunciado completo, tengo lo que tú pusiste como opción de menú:
1
System.out.println("4.- trimestre con mayores ventas");

Y yo eso lo interpreto como que lo que tenemos que averiguar es cuál de los 4 trimestres ha tenido mayores ventas.
No de forma individual, sino en general.

Es decir, sumar las 10 ventas del trimestre 1.
Por otro lado sumar las 10 ventas del trimestre 2.
Lo mismo con las diez del trimestre 3,....y las del trimestre 4

Y de esas 4 sumas, indicar cuál es la mayor, para determinar que trimestre ha sido el más productivo.


Ahora bien, si el enunciado completo indica otra cosa distinta, ya no lo sé.
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 11/02/2021 14:42:39
Hola!!!
Yo esa parte del enunciado lo interpreté en el sentido de cual es la mayor de las ventas de cada comercial.
Al final decidí hacerlo así para no complicarme demasiado con el ejercicio.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/**
 * Sacar el trimestre con mayores ventas
 */
private static void mayoresVentas() {
    // TODO Esbozo de método generado automáticamente
    System.out.println(
            "Listado de los trimestres con mayores ventas: trimestre 1, trimestre 2, trimestre 3, trimestre 4");
    double maximaVenta = 0;
    for(int i=0;i<FILAS;i++) {
        for(int j=0;j<COLUMNAS;j++) {
            if(ventas[i][j] > maximaVenta ) {
                maximaVenta = ventas[i][j];
 
            }
        }
        //mostramos el resultado del valor mayor de cada comercial
        System.out.println("Comercial " + (i+1) + " " + nombreA[i+1] + " " + apellidosA[i+1]);
        System.out.println("La máxima venta es: " + maximaVenta);
    }
 
 
}// fin metodo mayoresVentas()


Sin embargo la opción que planteas también es interesante. Y se podría añadir. ES LA QUE COMENTAS DE AVERIGUAR LA VENTAS MAYOR DE MANERA EN GENERAL EN LUGAR DE MANERA PARTICULAR DE CADA COMERCIAL.

Yo en mi caso he averiguado cual es la venta mayor de cada comercial con el metodo.

Pero supongo que habría que hacer una comparación if...else... entre la venta mayor de cada comercial y compararla con la venta mayor de otro comercial y ver cual es la mayor pero mi duda es si hay que hacerlo por cada trimestre el if...else...

Me estoy liando. Como averiguo con el metodo cual es la maxima venta, luego comparo la maxima venta de un comercial con la maxima venta de otro comercial en un determinado trimestre o hay que hacer dos comparaciones distintas??? Una con respecto al comercial con máxima venta con respecto a otro comercial y una segunda comparación con el trimestre con mayor venta ???? No sé si estoy mal enfocado.

Bueno lo voy a hacer como tu comentas: voy a sumar las 10 ventas de cada trimestre y comparar un trimestre con otro trimestre y así no me rallo tanto. Creo que esto es lo que me comentabas.
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 11/02/2021 14:59:41
Acabo de hacerlo!!!

Este es mi codigo

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
/**
 * Sacar el trimestre con mayores ventas
 */
private static void mayoresVentas() {
    // TODO Esbozo de método generado automáticamente
    System.out.println(
            "Listado de los trimestres con mayores ventas: trimestre 1, trimestre 2, trimestre 3, trimestre 4");
    double maximaVenta = 0;
    double sumaTotal = 0; //suma total del trimestre 1...
    for(int i=0;i<FILAS;i++) {
        for(int j=0;j<COLUMNAS;j++) {
            if(ventas[i][j] > maximaVenta ) {
                maximaVenta = ventas[i][j];
 
            }
            sumaTotal = sumaTotal + ventas[i][j]; //averiguar la suma total de cada trimestre
        }
        //mostramos el resultado del valor mayor de cada comercial
        System.out.println("Comercial " + (i+1) + " " + nombreA[i] + " " + apellidosA[i]);
        System.out.println("La máxima venta es: " + maximaVenta);
        System.out.println("Suma total del trimestre: " + sumaTotal);
    }
 
 
}// fin metodo mayoresVentas()

Pero me salen estos resultados:

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
BIENVENIDOS A LA APLICACIÓN DE GESTIÓN DE VENTAS DE NUESTROS COMERCIALES
-------MENÚ PRINCIPAL--------
 
1.- entrada de los nombres de los comerciales
2.- entrada de las ventas de los comerciales (decidir que se entrarán las ventas mensuales
3.- ventas totales de cada comercial
4.- trimestre con mayores ventas
5.- listado de comerciales ordenados por ventas de un trimestre
6.- salir
 
-----------------------------
ELIJE UNA OPCIÓN:
1
Introduzca nuevos comerciales en la aplicación:
COMERCIAL 1:
Introduzca CIF del comercial:
1
Introduzca NOMBRE del COMERCIAL:
antonio
Introduzca APELLIDOS del COMERCIAL:
garrido
COMERCIAL 2:
Introduzca CIF del comercial:
2
Introduzca NOMBRE del COMERCIAL:
david
Introduzca APELLIDOS del COMERCIAL:
sanchez
-------MENÚ PRINCIPAL--------
 
1.- entrada de los nombres de los comerciales
2.- entrada de las ventas de los comerciales (decidir que se entrarán las ventas mensuales
3.- ventas totales de cada comercial
4.- trimestre con mayores ventas
5.- listado de comerciales ordenados por ventas de un trimestre
6.- salir
 
-----------------------------
ELIJE UNA OPCIÓN:
2
COMERCIAL 1/2
1 antonio garrido
COMERCIAL 2/2
2 david sanchez
Ingrese las ventas trimestrales de cada comercial (26000):
Comercial 1 antonio garrido
Trimestre 1
3000
Trimestre 2
4000
Trimestre 3
5000
Trimestre 4
6000
Comercial 2 david sanchez
Trimestre 1
7000
Trimestre 2
8000
Trimestre 3
9000
Trimestre 4
10000
-----------------------------------------------------------
VENTAS TRIMESTRALES DE CADA COMERCIAL
-----------------------------------------------------------
Comercial 1 antonio garrido
Trimestre 1
3000.0 €
Trimestre 2
4000.0 €
Trimestre 3
5000.0 €
Trimestre 4
6000.0 €
Comercial 2 david sanchez
Trimestre 1
7000.0 €
Trimestre 2
8000.0 €
Trimestre 3
9000.0 €
Trimestre 4
10000.0 €
-------MENÚ PRINCIPAL--------
 
1.- entrada de los nombres de los comerciales
2.- entrada de las ventas de los comerciales (decidir que se entrarán las ventas mensuales
3.- ventas totales de cada comercial
4.- trimestre con mayores ventas
5.- listado de comerciales ordenados por ventas de un trimestre
6.- salir
 
-----------------------------
ELIJE UNA OPCIÓN:
3
-----------------------------------------------------------
Listado de las ventas totales de cada comercial
-----------------------------------------------------------
Comercial 1 antonio garrido
18000.0 €
Comercial 2 david sanchez
34000.0 €
-------MENÚ PRINCIPAL--------
 
1.- entrada de los nombres de los comerciales
2.- entrada de las ventas de los comerciales (decidir que se entrarán las ventas mensuales
3.- ventas totales de cada comercial
4.- trimestre con mayores ventas
5.- listado de comerciales ordenados por ventas de un trimestre
6.- salir
 
-----------------------------
ELIJE UNA OPCIÓN:
4
Listado de los trimestres con mayores ventas: trimestre 1, trimestre 2, trimestre 3, trimestre 4
Comercial 1 antonio garrido
La máxima venta es: 6000.0
Suma total del trimestre: 18000.0
Comercial 2 david sanchez
La máxima venta es: 10000.0
Suma total del trimestre: 52000.0
-------MENÚ PRINCIPAL--------
 
1.- entrada de los nombres de los comerciales
2.- entrada de las ventas de los comerciales (decidir que se entrarán las ventas mensuales
3.- ventas totales de cada comercial
4.- trimestre con mayores ventas
5.- listado de comerciales ordenados por ventas de un trimestre
6.- salir
 
-----------------------------
ELIJE UNA OPCIÓN:

Ains lo que suman son los trimestres 1, 2, 3 y 4 y no me suma la la cantidad de trimestre 1 de un comercial + la cantidad del trimestre del otro comercial. Con tanto for anidado me lío. Veré que es lo que falla si lo encuentro.
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

Array bidimensional y Metodo añadir

Publicado por Kabuto (1381 intervenciones) el 13/02/2021 12:17:33
Una de las cosas que fallan, es el sentido en el que recorres la matriz.

Normalmente, las recorremos como tú has puesto
1
2
3
4
5
6
for(int i=0;i<FILAS;i++) {
    for(int j=0;j<COLUMNAS;j++) {
        if(ventas[i ][j] > maximaVenta ) {
            maximaVenta = ventas[i ][j];
 
        }

Ese código lo que haces recorrer por FILAS. Es decir, se recorre la primera fila, luego la segunda, etc..
Por eso te suma trimestres.

Una matriz se puede representar como una tabla.
Mira este ejemplo, estás recorriéndola en el sentido que marcan las flechas, es decir, por FILAS.


imagen_2021-02-13_113802

Lo que queremos en este caso, es recorrer por COLUMNAS:

imagen_2021-02-13_114059

¿Cómo hacemos eso?
Pues intercambiando los indices.
Es decir, la i son FILAS y la j son columnas.
EL primer indice indica que sentido se va a recorrer.
Así, leemos por FILAS --> ventas[i ][j]
Y así, leemos por COLUMNAS --> ventas[j][i ]

O también, intercambiando los bucles. Es decir, el primer bucle marca en que sentido se va a recorrer.
Quizás, en lugar de usar las típicas i y j, se entiende mejor de este modo:

1
2
3
4
5
6
7
for(int col=0; col<COLUMNAS; col++) {
    for(int fil=0; fil<FILAS; fil++) {
        if(ventas[fil][col] > maximaVenta ) {
            maximaVenta = ventas[fil][col];
 
        }
    }
Aunque el primer indice sea la FILA, como el primer bucle corresponde a las COLUMNAS, ese será el sentido en el que se va a recorrer.

Luego, otra cosa a comentar.
Tu búsqueda de mayorVenta, lo que marco en negrita

1
2
3
4
5
6
7
8
for(int i=0;i<FILAS;i++) {
        for(int j=0;j<COLUMNAS;j++) {
            if(ventas[i ][j] > maximaVenta ) {
                maximaVenta = ventas[i ][j];
 
            }
            sumaTotal = sumaTotal + ventas[i ][j]; //averiguar la suma total de cada trimestre
        }
Ahí estarías encontrando la mayor venta individual.
Es decir: "Fulanito obtuvo la mejor venta de todas, en el 2ª trimestre, consiguiendo xx.xxx euros"

Pero, si lo que queremos es detectar el trimestre de mayor ventas, es decir:
"El 3er trimestre, en su conjunto(suma de ventas de cada comercial), ha sido el trimestre con mayor beneficio de ventas"

Entonces primero hay que obtener la suma de cada trimestre. Esto nos dará 4 sumas.
Y luego, tenemos que ver cuál de esas cuatro sumas es la mayor, para determinar el mejor trimestre de todos.

Esas sumas las podemos guardar en un array unidimensional de 4 elementos

imagen_2021-02-13_120100

Y ya luego sería recorrer ese array buscando la mayor suma.

Recapitulando:
- Recorrer matriz por COLUMNAS, no por FILAS.
- Sumar las ventas de cada COLUMNA y acumular resultado en array de 4 elementos.
- Recorrer array para detectar la mayor suma de ventas trimestral


Te dejo a continuación un método de como lo he resuelto yo.
Míralo si quieres, aunque quizás te resulte más interesante primero intentarlo por tu cuenta. Y ya luego si te quedan dudas o no te sale bien, pues consultas este 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
private static void trimestreMayoresVentas(int[][] arrayVentas) {
 
    int[] ventasTotales = new int[4];
    /*
     * Recorremos la matriz en vertical, es decir,
     * leyendo columnas de arriba a abajo y sumando
     * las ventas de cada columna en el array ventasTotales
     */
 
    for (int col = 0; col < COLUMNAS; col++)
        for (int fil = 0; fil < FILAS; fil++)
            ventasTotales[col] = arrayVentas[fil][col];
 
    //Tenemos las sumas, buscamos la mayor
    int mayor = 0; //Importe de mayor venta
    int trimestre = 0; //Nº de trimestre con venta mayor
    for (int i = 0; i < ventasTotales.length; i++)
        if (ventasTotales[i] > mayor) {
            mayor = ventasTotales[i]; //Guardamos mayor suma de ventas
            trimestre = i; //Guardamos nº de trimestre
        }
 
    //Resultado
    System.out.println("\nEl trimestre con mayores ventas es el #" + trimestre);
    System.out.println("Venta acumulada: " + mayor + "€\n");
}
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 16/02/2021 20:25:33
Hola de nuevo!!!
Claro el primer for es la fila y el segundo es la columna, para almacenar la columna se invertía el orden de los índices. Vale me lo apunto.

Otra cosa que me dí cuenta que en el metodo cuando lo creaba....:

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
/**
	 * Sacar el trimestre con mayores ventas
	 */
	private static void mayoresVentas() {
		// proceso 1: recorrer matriz por columnas y no por filas
		//sumar las ventas de cada columna y acumular el resultado en un array de 4 elementos
		//recorrer el array anterior para detectar la mayor suma de ventas trimestral
		System.out.println(
				"Listado de los trimestres con mayores ventas: trimestre 1, trimestre 2, trimestre 3, trimestre 4");
 
		//almacenamos el resultado en un array de 4 elementos
		double[] ventasTotales = new double[COLUMNAS]; //mayores ventas de cada COLUMNA NO CONFUNDIR CON MAYORES VENTAS DE CADA FILA
 
		//recorremos el array bidimensional en orden inverso para obtener las columnas
		for(int j=0;j<COLUMNAS;j++) {
			for(int i=0;i<FILAS;i++) {
				double sumaTotal = 0;
				//acumulamos el resultado en un array de 4 elementos
//				ventasTotales[COLUMNAS] = sumaTotal + ventas[i][j];//me daba problemas
				ventasTotales[COLUMNAS] = ventas[i][j]; //por cada iteración va incrementándose ventas[][]
 
 
 
				}
 
			}
 
		double mayor = 0; //importe de mayor venta
		int trimestre = 0; //numero de trimestre con mayor venta
		//recorremos el array de ventasTotales[COLUMNAS] para saber cual es la mayor venta de cada columna
		for(int i=0;i<ventasTotales.length;i++) {
			mayor = ventasTotales[i]; //el valor mayor de cada columna
			trimestre = i+1; //numero de trimestre-->solo hay cuatro trimestres
 
		}
 
		//resultado
		System.out.println("TRIMESTRE CON MAYORES VENTAS: " + trimestre);
		System.out.println("VENTAS TOTALES DE CADA TRIMESTRE: " + mayor);
 
 
 
 
	}// fin metodo mayoresVentas()

...me daba problemas en la línea
1
ventasTotales[COLUMNAS] = ventas[i][j]; //por cada iteración va incrementándose ventas[][]

Yo lo hice de la siguiente forma que no se si es lo mismo:
1
ventasTotales[COLUMNAS] = sumaTotal + ventas[i][j];//me daba problemas

Así que me daba problemas de las dos formas mencionadas.

En el error me decía lo siguiente:
1
2
3
4
5
6
ELIJE UNA OPCIÓN:
4
Listado de los trimestres con mayores ventas: trimestre 1, trimestre 2, trimestre 3, trimestre 4
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
	at supuesto1.Comerciales1.mayoresVentas(Comerciales1.java:186)
	at supuesto1.Comerciales1.main(Comerciales1.java:264)

Creo que significa que algo del tamaño de los arrays. Entiendo que mi confusión con respecto al metodo mayoresVentas() es que yo sumaba las filas y lo que había que hacer era la suma de las columnas. Al recorrer el array de 4 columnas me debía salir bien pero no sé lo que falla.

Me he hecho comentarios a lo largo del ejercicio por si sigue el razonamiento correcto.
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 16/02/2021 20:37:51
Vale ya conseguí descubrir el error!!
1
ventasTotales[j] = ventas[i][j]; //por cada iteración va incrementándose ventas[][]

Ahora me doy cuenta también que mi expresión
1
ventasTotales[j] = sumaTotal + ventas[i][j];

es igual a la tuya que ponías:
1
ventasTotales[j] = ventas[i][j]; //por cada iteración va incrementándose ventas[][]
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 16/02/2021 20:47:51
He corregido un error que se me había había olvidado poner el if dentro del for para saber cual era el mayor.

1
2
3
4
f(ventasTotales[i] > mayor) {
    mayor = ventasTotales[i]; //el valor mayor de cada columna
    trimestre = i+1; //numero de trimestre-->solo hay cuatro trimestres
}

Al final he tenido que ver tu solución.

Veo que tengo que dibujar el ejercicio por el tema del array bidimensional que me rallaba un poco.
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

Array bidimensional y Metodo añadir

Publicado por Kabuto (1381 intervenciones) el 19/02/2021 01:13:34
Uy, dibujar ayuda un montón.

En programación siempre se enseña a crear Diagramas de Flujo y se insta a usarlos. Y no dudo de su utilidad.

Pero para aclarar ciertas ideas, a mi me ayuda mucho dibujar cosas a mi manera. Coger lápiz y papel y poder visualizar una matriz es muy útil.
O hacer un debug a mano: escribir en papel las variables, ejecutar "mentalmente" el programa paso a paso y escribir los valores que van tomando esas variables.
Eso ayuda a entender mejor como funciona internamente el ordenador. En este programa, quizás te había ayudado a ver en papel como la variable i no se incrementaba hasta que la j no completaba un ciclo, y que por eso por la matriz te movías recorriendo filas, y no columnas.

Con el tiempo cada vez se necesita dibujar menos claro está, pero yo al principio dibujaba mucho para dilucidar mejor la lógica que tenía que seguir.
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 19/02/2021 13:52:35
Vaya!!
Gracias por el consejo.
La verdad que sí me has ayudado a ver el ejercicio y salir del bloqueo.

Es la primera vez que consulto en un foro de programación. Pero veo que es muy útil exponer bien tu problema y dibujar el ejercicio de programación. Ahora entiendo algo más del array bidimensional.

Con respecto al menú de mi ejercicio, me pide hacer un LISTADO DE COMERCIALES ORDENADOS POR VENTAS DE UN TRIMESTRE.
He investigado el tema de la interfaz comparator y la interfaz comparable y creo que este apartado tengo que usar las dos interfaces.
En el ejercicio no me especifica nada más. La interfaz comparable se usa para hacer un ordenamiento natural y la interfaz comparable se usa para hacer un ordenamiento alternativo. Creo que por ahora voy bien.

Empezaré por la interfaz comparable. La clase Comerciales 1 implementa la interfaz Comparable:

1
2
3
4
5
6
7
8
9
public class Comerciales1 implements Comparable<Comerciales1> {
    @Override
     public int compareTo(Comerciales1 objetoComercial) {
    int resultado;
    /*aqui es donde debo ver como funciona este metodo*/
    return resultado;
 
}
}

Aquí es donde he leído que el resultado es 1, 0 o -1. Sería el metodo algo así: Si resultado es igual a 0, ordenar por nombre y si los resultados son distintos a 0 ????? Sería ordenar por otro criterio por ejemplo por ventas, por apellidos....????

Con respecto al metodo lo unico que tengo hecho es esto:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
	 * Ordenado natural por nombre. Interfaz gráfica Comparable y metodo compareTo
	 */
//	@Override
	public int compareTo(Comerciales1 objetoComercial) {
		int resultado;
		if(resultado == 0) {
			resultado = this.nombreA[].compareTo(objetoComercial.nombreA[]);
		}
 
		return resultado;
 
 
	}

Con respecto a la aplicación, se usa con la clase Collections o Arrays así que debería usar en el metodo main de la aplicación Arrays.sort(array) o algo así.
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 19/02/2021 13:59:14
Voy a intentar hacer un ordenamiento natural por nombre. En este caso sería: si el nombre de un comercial es menor a 0, un nombre es menor que otro; si el nombre es igual a 0, los nombres son iguales y si el nombre es mayor que 0, entonces un nombre sería mayor que otro. No sé si la lógica del metodo va por ahí.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
/**
	 * Ordenado natural por nombre. Interfaz gráfica Comparable y metodo compareTo
	 * 0, -1 o 1 / si son iguales o si uno es menor que otro o si uno es mayor que otro
	 */
//	@Override
	public int compareTo(Comerciales1 objetoComercial) {
		int resultado;
		if(this.nombreA[]) < (objetoComercial.nombreA[]) {
			resultado = -1;
		}
		else if(this.nombreA[] > (objetoComercial.nombreA[])) {
			resultado = 1;
 
		}
		else resultado = 0;
 
		return resultado;
 
 
	}

Creo que por ahí sería la lógica. Pero me salen errores.
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

Array bidimensional y Metodo añadir

Publicado por Kabuto (1381 intervenciones) el 22/02/2021 01:04:55
Sobre ordenar por trimestres.

No nos piden crear una clase Comercial, por lo tanto, no se espera que recurramos a la interfaz Comparable.
Aún así, luego pondré una posible clase implementando este sistema.

Pero primero, vamos a resolverlo sin ningún Comparable.

Para esa opción, lo primero que habría que hacer es preguntar al usuario cuál trimestre quiere usar como referencia para ordenar.
Para ese trimestre, que corresponde a una de las COLUMNAS de la matriz, habría que ordenar de menor a mayor las ventas de dicha COLUMNA.
Y al mismo tiempo, cambiar el orden de los nombres de los comerciales de forma simultánea con las ventas.
Es decir, si una venta, por ser la menor de todas, se coloca en la primera posición de la COLUMNA, el nombre asociado a esa venta, también ha de ponerse en la primera posición en su propio array.

Bien, para no alterar los arrays originales, yo trabajaría con una copia del array de nombres.
Y al mismo tiempo, para no trabajar sobre la matriz que puede ser un poco más lioso, crearía un array unidimensional con las ventas de la COLUMNA que corresponde al trimestre solicitado por el usuario.

Así podemos ordenar esos arrays sin alterar los originales.
¿Cómo ordenarlos?

Pues por ejemplo usando el famoso "algoritmo de la burbuja".
Las ventas, como son valores int, son sencillos de comparar. Así, recorreremos el array de ventas que hemos creado comparando un elemento con el siguiente, si el siguiente es menor, han de intercambiar las posiciones, y se continúa con el siguiente.
Al mismo tiempo que intercambiamos las ventas de posiciones, intercambiaremos también los nombres correspondientes a esas ventas.

Este recorrido se repite unas cuantas veces hasta que los elementos de ambos arrays quedan ordenados.

Este podría ser el código del método que realice esta tarea.
En él, primero se muestran los arrays (nombre y venta asociada) sin ordenar. Luego se ordenan, y se vuelven a mostrar.
Así podemos comprobar como, tras ordenar, los nombres siguen acompañados de sus correspondientes ventas.

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
private static void ordenarComerciales(int[][] arrayVentas, String[] comerciales) {
		System.out.print("\nIndique trimestre [1-4]: ");
		int trimestre = Integer.parseInt(sc.nextLine());
 
		/*
		 * Para no alterar los arrays originales, crearemos una copia
		 * del array de nombres.
		 * Y del array de ventas, crearemos un array unidimensional
		 * solo con las ventas del trimestre que nos interesa
		 */
		String[] nombres = new String[FILAS];
		for (int i = 0; i < FILAS; i++)
			nombres[ i] = comerciales[ i];
 
		int[] ventas = new int[FILAS];
		//El valor del trimestre - 1 nos dice la columna de la matriz que nos interesa
		for (int fila = 0; fila < 10; fila++)
			ventas[fila] = arrayVentas[fila][trimestre - 1];
 
		/*
		 * Tenemos copia del array de nombres y copia de las ventas
		 * del trimestre que el usuario quiere tomar como referencia
		 * para ordenar.*/
		System.out.println("\nTrimestre de ventas original, sin ordenar");
		for (int fila = 0; fila < FILAS; fila++) {
			System.out.println(nombres[fila] + " -- " + ventas[fila]);
		}
 
		/*
		 * Con el "método burbuja", ordenaremos las ventas
		 * y al mismo tiempo que una venta cambia de posición,
		 * cambiaremos el nombre del comercial asociado a esa venta.
		 */
		//Variables auxiliares para mover elementos al ordenar sus posiciones
		int ventaAux;
		String nombreAux;
		//Algoritmo de ordenamiento "burbuja"
        for (int i = 0; i < FILAS - 1; i++) {
            for (int j = 0; j < FILAS - i - 1; j++) {
                if (ventas[j + 1] < ventas[j]) {
                	//Intercambiamos venta
                    ventaAux = ventas[j + 1];
                    ventas[j + 1] = ventas[j];
                    ventas[j] = ventaAux;
                    //Intercambiamos nombre asociado
                    nombreAux = nombres[j + 1];
                    nombres[j + 1] = nombres[j];
                    nombres[j] = nombreAux;
                }
            }
        }
		//Ambos array se han ordenado según las ventas, de menor a mayor.
        System.out.println("\nTrimestre de ventas ordenado");
		for (int fila = 0; fila < FILAS; fila++) {
			System.out.println(nombres[fila] + " -- " + ventas[fila]);
		}
	}

Para que funcione, no olvidemos incluirlo en el switch del menú:

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
try {
				System.out.println("Escribe una de las opciones: ");
				opcion = Integer.parseInt(sc.nextLine());
 
				switch (opcion) {
				case 1:
					ingresoComercial(comerciales);
					break;
				case 2:
					ingresoVentas(comerciales, ventas);
					break;
				case 3:
					ventasTotales(comerciales, ventas);
					break;
				case 4:
					trimestreMayoresVentas(ventas);
					break;
				case 5:
					ordenarComerciales(ventas, comerciales);
					break;
				case 6:
					salir = true;
					break;
				default:
					System.out.println("Solo números entre 1 y 6");
				}
			} catch (Exception e) {
				// TODO Bloque catch generado automáticamente
				System.out.println("Debes insertar un número");
			} // fin catch

Y si lo ejecutamos, tras introducir nombres y generar ventas, podemos indicar un trimestre para que muestre una lista ordenada de menor a mayor venta.
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
1 - Entrada de los nombres de los comerciales
 2 - Entrada de las ventas de los comerciales
 3 - Ventas totales de cada comercial
 4 - Trimestre con mayores ventas
 5 - Listado de comerciales ordenados por ventas de un trimestre
 6 - Salir
 
Escribe una de las opciones:
5
 
Indique trimestre [1-4]: 1
 
Trimestre de ventas original, sin ordenar
Sara -- 21657
Victor -- 22263
Paco -- 19685
Sandra -- 20286
Javier -- 24289
Laura -- 22993
David -- 21644
Julio -- 24041
Maria -- 17578
Jorge -- 17265
 
Trimestre de ventas ordenado
Jorge -- 17265
Maria -- 17578
Paco -- 19685
Sandra -- 20286
David -- 21644
Sara -- 21657
Victor -- 22263
Laura -- 22993
Julio -- 24041
Javier -- 24289

(sigo a continuación...)
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

Array bidimensional y Metodo añadir

Publicado por Kabuto (1381 intervenciones) el 22/02/2021 01:05:39
Visto esto, vamos a ver como podría ser una posible clase, con la interfaz Comparable programada para ordenarse según el atributo venta.
Antes quiero aclarar una cosa.
Una entidad Comercial (clase Comercial), en este programa, no tiene solo una venta, tiene 4 ventas. (un total por cada trimestre)
Entonces, hacer que se ordene esta clase, requiere complicarlo un poquito porque habría que especificarle cuál de los cuatro totales ha de escoger para compararse con el resto de Comerciales.

Y además, insisto de nuevo, no se nos pide crear ninguna clase Comercial (aunque tampoco es que esté prohibido).

Pero, como la intención es resolver la opción 5 del menú, valiéndonos de POO, podemos darle otro enfoque.
Podemos crear una clase llamada por ejemplo VentaAsociada
Esta clase tendría dos atributos, un nombre de comercial (tomado del array de Strings) y una venta trimestral (tomada de la matriz de ventas, según el trimestre que indique el usuario)
Así, esta clase estaría mejor enfocada a resolver esa parte del ejercicio.

Esta podría ser la clase VentaAsociada, implementando la interfaz Comparable.
En esta implementación, vamos a especificar (marco en negrita) que se va a comparar con objetos de su misma clase.
No es obligatorio especificar esto, pero sí recomendable porque luego nos permite que el método compareTo() sea más sencillo de escribir.
Además sabemos que en el programa donde lo vamos a usar, es imposible que tuviera que compararse con objetos de distinta clase.

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
public class VentaAsociada implements Comparable<VentaAsociada>{
 
	private String nombre;
	private int venta;
 
	public VentaAsociada(String nombre, int venta) {
		this.nombre = nombre;
		this.venta = venta;
	}
 
	@Override
	public String toString() {
		return nombre + " -- " + venta;
	}
 
	@Override
	public int compareTo(VentaAsociada otraVenta) {
		if (venta < otraVenta.venta) //ESTA venta es menor
			return -1;
		else if (venta > otraVenta.venta) //ESTA venta es mayor
			return 1;
		else //Ambas ventas son IGUALES
			return 0;
	}
 
}

En el método compareTo() vemos como para indicar que ESTE objeto es menor respecto al OTRO con el que se está comparando, lo que hacemos es retornar un valor negativo (no tiene porque ser -1).
Si es mayor, devolvemos un positivo.
Si son iguales, devolvemos 0.

Además le he incluido un método toString() para representa fácilmente como queremos que estos objetos se muestren en pantalla.

Bien, ahora que disponemos de esta clase, volvemos al programa principal.
Para no quitar la forma de ordenar que puse antes, podemos crear un nuevo método con el mismo nombre, pero con la coletilla POO para diferenciarlos.
De nuevo pedimos trimestre.
Luego creamos un ArrayList con objetos de nuestra nueva clase VentaAsociada, tomando nombres y ventas de los arrays.
Una vez creado el ArrayList, lo mostramos tal cual, sin ordenar.

Luego ordenamos, fíjate que ArrayList ya dispone de un método para ordenar sus elementos llamado sort().
Este método funciona de dos formas. Una forma es pasándole entre paréntesis un objeto Comparable con las reglas de ordenación usando genéricos. Esto sirve en el caso de que la clase no tuviera implementado su propio Comparable, o bien queremos establecer una nueva regla de ordenación.

Pero, como en este caso ya tenemos Comparable implementado, simplemente la pasamos valor null. En este caso, el ArrayList se ordenará según lo que indiquen los compareTo() de los objetos que contiene.

Y una vez ordenado, volvemos a mostrar el contenido del ArrayList.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
private static void ordenarComercialesPOO(int[][] arrayVentas, String[] comerciales) {
		System.out.print("\nIndique trimestre [1-4]: ");
		int trimestre = Integer.parseInt(sc.nextLine());
 
		//Crearemos un ArrayList de tipo VentaAsociada
		ArrayList<VentaAsociada> ventasAsociadas = new ArrayList<VentaAsociada>();
		//En este array, crearemos objetos con los nombres y las ventas del trimestre indicado
		for (int fila = 0; fila < FILAS; fila++)
			ventasAsociadas.add(new VentaAsociada(comerciales[fila], arrayVentas[fila][trimestre - 1]));
 
		//Mostramos primero sin ordenar
		System.out.println("\nTrimestre de ventas original, sin ordenar");
		for (VentaAsociada venta: ventasAsociadas)
			System.out.println(venta);
 
		//Ordenamos, el ArrayList es capaz de hacerlo solo, si hemos implementado bien Comparable
		ventasAsociadas.sort(null);
 
		//Mostramos de nuevo, ya ordenado
		System.out.println("\nTrimestre de ventas ordenado");
		for (VentaAsociada venta: ventasAsociadas)
			System.out.println(venta);
	}

Para poder usar este método, yo he ampliado el menú de opciones para poder elegir ambas fórmulas:
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
while (!salir) {// salir es false y while ejecuta instrucciones si while es distinto de false
			System.out.println("\n");
			System.out.println(" 1 - Entrada de los nombres de los comerciales");
			System.out.println(" 2 - Entrada de las ventas de los comerciales");
			System.out.println(" 3 - Ventas totales de cada comercial");
			System.out.println(" 4 - Trimestre con mayores ventas");
			System.out.println(" 5 - Listado de comerciales ordenados por ventas de un trimestre");
			System.out.println(" 6 - [POO]Listado de comerciales ordenados por ventas de un trimestre");
			System.out.println(" 7 - Salir\n");
 
			try {
				System.out.println("Escribe una de las opciones: ");
				opcion = Integer.parseInt(sc.nextLine());
 
				switch (opcion) {
				case 1:
					ingresoComercial(comerciales);
					break;
				case 2:
					ingresoVentas(comerciales, ventas);
					break;
				case 3:
					ventasTotales(comerciales, ventas);
					break;
				case 4:
					trimestreMayoresVentas(ventas);
					break;
				case 5:
					ordenarComerciales(ventas, comerciales);
					break;
				case 6:
					ordenarComercialesPOO(ventas, comerciales);
					break;
				case 7:
					salir = true;
					break;
				default:
					System.out.println("Solo números entre 1 y 6");
				}
			} catch (Exception e) {
				// TODO Bloque catch generado automáticamente
				System.out.println("Debes insertar un número");
			} // fin catch
 
		}

Si ahora ejecuto el programa, y comprueba ambos sistemas de ordenación, podemos ver que obtenemos el mismo resultado.

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
1 - Entrada de los nombres de los comerciales
 2 - Entrada de las ventas de los comerciales
 3 - Ventas totales de cada comercial
 4 - Trimestre con mayores ventas
 5 - Listado de comerciales ordenados por ventas de un trimestre
 6 - [POO]Listado de comerciales ordenados por ventas de un trimestre
 7 - Salir
 
Escribe una de las opciones:
5
 
Indique trimestre [1-4]: 1
 
Trimestre de ventas original, sin ordenar
Sara -- 20192
Victor -- 23876
Sandra -- 16268
Lucas -- 16227
Maria -- 18964
Javier -- 16152
Eva -- 21723
Jorge -- 24688
Sara -- 19691
Jimmy -- 22412
 
Trimestre de ventas ordenado
Javier -- 16152
Lucas -- 16227
Sandra -- 16268
Maria -- 18964
Sara -- 19691
Sara -- 20192
Eva -- 21723
Jimmy -- 22412
Victor -- 23876
Jorge -- 24688
 
 
 1 - Entrada de los nombres de los comerciales
 2 - Entrada de las ventas de los comerciales
 3 - Ventas totales de cada comercial
 4 - Trimestre con mayores ventas
 5 - Listado de comerciales ordenados por ventas de un trimestre
 6 - [POO]Listado de comerciales ordenados por ventas de un trimestre
 7 - Salir
 
Escribe una de las opciones:
6
 
Indique trimestre [1-4]: 1
 
Trimestre de ventas original, sin ordenar
Sara -- 20192
Victor -- 23876
Sandra -- 16268
Lucas -- 16227
Maria -- 18964
Javier -- 16152
Eva -- 21723
Jorge -- 24688
Sara -- 19691
Jimmy -- 22412
 
Trimestre de ventas ordenado
Javier -- 16152
Lucas -- 16227
Sandra -- 16268
Maria -- 18964
Sara -- 19691
Sara -- 20192
Eva -- 21723
Jimmy -- 22412
Victor -- 23876
Jorge -- 24688


Visto todo esto y ya para terminar y no agobiar con tanta explicación xD quiero que volvamos al método compareTo()
1
2
3
4
5
6
7
8
9
@Override
	public int compareTo(VentaAsociada otraVenta) {
		if (venta < otraVenta.venta) //ESTA venta es menor
			return -1;
		else if (venta > otraVenta.venta) //ESTA venta es mayor
			return 1;
		else //Ambas ventas son IGUALES
			return 0;
	}

Lo he escrito de esa manera para que se vea mejor cual es la lógica que sigue este método y que sirva de referencia para futuras implementaciones.
Siguiendo esta lógica, podemos ordenar los objetos por los atributos que nos diera la gana, y según las reglas que nos de la gana, ya que podemos "complicarlo" tanto como queramos.
Una regla podría ser, yo que sé, ordenar objetos Coche por colores, creando una lógica donde BLANCO sea menor que AMARILLO, y AMARILLO menor que NARANJA.., así hasta el color NEGRO que sería el mayor de todos...

Ahora bien, en este caso, estamos comparando ventas. Y estas ventas son valores de tipo int.
Y este tipo de dato, Java ya sabe como deben compararse.
Así que en realidad, podríamos haber llamado a la clase Integer que tiene un método estático para comparar dos enteros.
Y lo podríamos haber resuelto así:
1
2
3
4
@Override
	public int compareTo(VentaAsociada otraVenta) {
		return Integer.compare(venta, otraVenta.venta);
	}

Si lo pruebas, verás que el resultado es el mismo.

Esto lo explico simplemente para tener en cuenta que cuando queramos hacer comparaciones en base a enteros, o a String..., Java ya sabe como compararlos y podemos valernos de eso para simplificar el código.
Un saludo.
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 25/02/2021 12:48:01
Hola!!
Muchas gracias por tus aportaciones!! He estado trabajando en la parte de ordenar sin usar la interfaz Comparable. Entonces la interfaz Comparable se usa cuando se vaya a usar una clase Comercial, Persona, Empleado... Es lo que sobreentiendo.

No conocía al algoritmo de ordenamiento de la burbuja pero estas estructuras solían repetir en muchos sitios y no sabía que algoritmo era. Ahora algo más claro. Aunque es bastante lioso al principio.

He hecho la primera parte del ejercicio con dos for pero para mostrar nombre y ventas.

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
81
82
83
/**
 * Metodo que después de listar los comerciales ordena los comerciales
 */
private static void ordenarComerciales() {
    Scanner lector = new Scanner(System.in);
    // declaramos la variable trimestre para solicitar el trimestre que queremos
    // ordenar
    int trimestre;
    System.out.println("Indique trimestre [1-4]: ");
    trimestre = lector.nextInt();
 
    // anotacion 1 para un trimestre, una de las columnas de la matriz, habría que
    // ordenar de menor a mayor
    // si una venta, por ser menos de todas, se coloca en la primera posición de la
    // columna, el nombre asociado a dicha venta también
    // ha de ponerse en la primera posición del array
 
    // para no alterar los arrays originales se crean una copia de los mismos
    // copia del array de nombres
    // copia del array columnas ventas trimestres tal (transformar de bidimensional
    // a unidimensional)
    String[] nombresOrdenar = new String[FILAS];
    String[] apellidosOrdenar = new String[FILAS];
    double[] ventasOrdenar = new double[FILAS];
 
    // asignamos los valores con for a ambos arrays
    for (int i = 0; i < FILAS; i++) {
        nombresOrdenar[i] = nombreA[i];
//			System.out.println(nombresOrdenar[i]);
    }
 
    for(int i=0;i<FILAS;i++) {
        apellidosOrdenar[i] = apellidosA[i];
    }
 
    for (int i = 0; i < FILAS; i++) {
        ventasOrdenar[i] = ventas[i][trimestre - 1]; // trimestre 0, 1, 2, 3
//			System.out.println(ventasOrdenar[i]);
    }
 
    // mostramos el resultado del trimestre insertado para ordenar posteriormente
    System.out.println("-----------------------------------------------------------");
    System.out.println("TRIMESTRE SIN ORDENAR");
    System.out.println("-----------------------------------------------------------");
    for (int i = 0; i < FILAS; i++) {
        System.out.println(nombresOrdenar[i] + " " + apellidosOrdenar[i] + " == " + ventasOrdenar[i]);
    }
    System.out.println("\n");
 
    // Variables auxiliares para mover los elementos al ordenar sus posiciones según
    // el algoritmo de ordenamiento de burbuja
    String nombreAux;
    String apellidoAux;
    double ventaAux;
 
    // ALGORITMO DE ORDENAMIENTO DE BURBUJA
    for (int i = 0; i < FILAS - 1; i++) {
        for (int j = 0; j < FILAS - i - 1; j++) {
            if (ventasOrdenar[j + 1] < ventasOrdenar[j]) {
                // intercambiamos venta
                ventaAux = ventasOrdenar[j + 1];
                ventasOrdenar[j + 1] = ventasOrdenar[j];
                ventasOrdenar[j] = ventaAux;
                // intercambiamos nombre asociado
                nombreAux = nombresOrdenar[j + 1];
                nombresOrdenar[j + 1] = nombresOrdenar[j];
                nombresOrdenar[j] = nombreAux;
            }
        }
    }
 
    // se ordenan los arrays según las ventas de menor a mayor usando la lógica del
    // algoritmo de ordenamiento burbuja
    System.out.println("-----------------------------------------------------------");
    System.out.println("Listado de comerciales ordenados por ventas de un trimestre");
    System.out.println("-----------------------------------------------------------");
 
    for (int i = 0; i < FILAS; i++) {
        System.out.println(nombresOrdenar[i] + " --- " + ventasOrdenar[i]);
    }
    System.out.println("-----------------------------------------------------------");
 
}// fin metodo ordenarComerciales()


Ahora voy a intentar ver como se haría para mostrar nombre y apellidos y ventas. Mi duda es si se haría con tres for o con dos for.

Veo que se haría con dos for. y que es parecido a recorrer un array bidimensional.


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
Mi resultado sería así:
ELIJE UNA OPCIÓN:
5
-----------------------------------------------------------
Indique trimestre [1-4]:
1
-----------------------------------------------------------
TRIMESTRE SIN ORDENAR
-----------------------------------------------------------
ANTONIO GARRIDO == 2600.0
DAVID SANCHEZ == 6500.0
JUAN JIMÉNEZ == 5000.0
 
 
-----------------------------------------------------------
Listado de comerciales ordenados por ventas de un trimestre
-----------------------------------------------------------
ANTONIO GARRIDO == 2600.0
JUAN JIMÉNEZ == 5000.0
DAVID SANCHEZ == 6500.0
-----------------------------------------------------------
==========MENÚ PRINCIPAL==========
 
1.- entrada de los nombres de los comerciales
2.- entrada de las ventas de los comerciales (decidir que se entrarán las ventas mensuales
3.- ventas totales de cada comercial
4.- trimestre con mayores ventas
5.- listado de comerciales ordenados por ventas de un trimestre
6.- salir
 
=================================
ELIJE UNA OPCIÓN:

Vale veo que todo va bien


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
81
82
83
84
85
86
87
88
/**
 * Metodo que después de listar los comerciales ordena los comerciales
 */
private static void ordenarComerciales() {
    Scanner lector = new Scanner(System.in);
    // declaramos la variable trimestre para solicitar el trimestre que queremos
    // ordenar
    int trimestre;
    System.out.println("Indique trimestre [1-4]: ");
    trimestre = lector.nextInt();
 
    // anotacion 1 para un trimestre, una de las columnas de la matriz, habría que
    // ordenar de menor a mayor
    // si una venta, por ser menos de todas, se coloca en la primera posición de la
    // columna, el nombre asociado a dicha venta también
    // ha de ponerse en la primera posición del array
 
    // para no alterar los arrays originales se crean una copia de los mismos
    // copia del array de nombres
    // copia del array columnas ventas trimestres tal (transformar de bidimensional
    // a unidimensional)
    String[] nombresOrdenar = new String[FILAS];
    String[] apellidosOrdenar = new String[FILAS];
    double[] ventasOrdenar = new double[FILAS];
 
    // asignamos los valores con for a ambos arrays
    for (int i = 0; i < FILAS; i++) {
        nombresOrdenar[i] = nombreA[i];
//			System.out.println(nombresOrdenar[i]);
    }
 
    for (int i = 0; i < FILAS; i++) {
        apellidosOrdenar[i] = apellidosA[i];
    }
 
    for (int i = 0; i < FILAS; i++) {
        ventasOrdenar[i] = ventas[i][trimestre - 1]; // trimestre 0, 1, 2, 3
//			System.out.println(ventasOrdenar[i]);
    }
 
    // mostramos el resultado del trimestre insertado para ordenar posteriormente
    System.out.println("-----------------------------------------------------------");
    System.out.println("TRIMESTRE SIN ORDENAR");
    System.out.println("-----------------------------------------------------------");
    for (int i = 0; i < FILAS; i++) {
        System.out.println(nombresOrdenar[i] + " " + apellidosOrdenar[i] + " == " + ventasOrdenar[i]);
    }
    System.out.println("\n");
 
    // Variables auxiliares para mover los elementos al ordenar sus posiciones según
    // el algoritmo de ordenamiento de burbuja
    double ventaAux;
    String nombreAux;
    String apellidoAux;
 
    // ALGORITMO DE ORDENAMIENTO DE BURBUJA
    for (int i = 0; i < FILAS - 1; i++) {
        for (int j = 0; j < FILAS - i - 1; j++) {
            if (ventasOrdenar[j + 1] < ventasOrdenar[j]) {
                // intercambiamos venta
                ventaAux = ventasOrdenar[j + 1];
                ventasOrdenar[j + 1] = ventasOrdenar[j];
                ventasOrdenar[j] = ventaAux;
                // intercambiamos nombre asociado
                nombreAux = nombresOrdenar[j + 1];
                nombresOrdenar[j + 1] = nombresOrdenar[j];
                nombresOrdenar[j] = nombreAux;
 
                // intercambiamos apellido asociado
                apellidoAux = apellidosOrdenar[j + 1];
                apellidosOrdenar[j + 1] = apellidosOrdenar[j];
                apellidosOrdenar[j] = apellidoAux;
            }
        }
    }
 
    // se ordenan los arrays según las ventas de menor a mayor usando la lógica del
    // algoritmo de ordenamiento burbuja
    System.out.println("-----------------------------------------------------------");
    System.out.println("Listado de comerciales ordenados por ventas de un trimestre");
    System.out.println("-----------------------------------------------------------");
 
    for (int i = 0; i < FILAS; i++) {
        System.out.println(nombresOrdenar[i] + " " + apellidosOrdenar[i] + " == " + ventasOrdenar[i]);
    }
    System.out.println("-----------------------------------------------------------");
 
}// fin metodo ordenarComerciales()


Ahora me queda la segunda parte del ejerciico. Este era la primera parte. La segunda parte era con un arraylist pero le he estado haciendo mientras hacía esta primera parte. De mi experiencia de estos dos ejercicios y por tus aportaciones veo que me tengo que aprender bien el tema de los algoritmos, los diagramas de flujo y practicar, practicar. Es la segunda vez que pregunto en muchos años en este foro una duda de tal magnitud. Pero mi experiencia ha sido positiva. Así que ahora seguiré con la segunda parte. Por cierto el enunciado lo tenía en pdf. No sé si podré acabar con el módulo de Programación este año pero al menos sé como puedo mejorar en programación y te lo agradezco muchísimo.
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 25/02/2021 13:16:21
=========================================CONTINUACIÓN===========================================
1
2
3
4
5
6
7
8
9
2.- Realizar el mismo programa pero almacenando objetos Comerciales en una lista, para ello crearemos la clase Comerciales que tendrá los siguientes atributos: String cif, String nombre, String apellidos, int[] trimestres. Así como los constructores, métodos setters y getters que creamos necesarios y otros métodos (toString, compareTo), Las opciones del menú en este caso serán las siguientes:
1.- Entrada datos de un comercial.
2.- Listado de los datos de un trimestre ordenado por ventas de ese trimestre (nombre,apellidos venta trimestre).
3.- Listado alfabéticos de los comerciales con sus ventas.
4.- Trimestre con mayores ventas.
5.- Salir.
El listado de la opción 2 sacará los datos con el formato indicado en la opción,
El listado alfabético de los comerciales de la opción 3 se realizará con el siguiente formato apellidos,nombre.
Los listados y consultas se realizarán a con objetos de la clase Iterator.

Este es el enunciado de la segunda parte. Claro en este sí me pide crear la clase Comercial con sus atributos y métodos set y get y constructores y otros metodos. LA SEGUNDA PARTE DE TU EXPLICACIÓN ANTERIOR ME SIRVE PARA TRABAJAR EN EL METODO COMPARETO. Pero mi problema reside en el tema de la interfaz Comparable y la interfaz Comparator. Pero este tema lo postergaré para más adelante.
Ahora me voy a dedicar a analizar la información.
En esta segunda parte CREAREMOS DOS CLASES: Comercial2 y Principal (donde irá el metodo main y el menú). La información la guardaremos en un ArrayList. En este caso es específicamente un ArrayList de objetos ya que usamos un objeto de la clase Comercial2.

Ahora evaluando la información veo que la información que se almacena en un ArrayList se puede listar de dos formas: for o iterator. Creo que es así aunque no estoy seguro.

La clase Comercial2 tendrá atributos: String cif, String nombre, String apellidos, int[] trimestres. En este caso trimestres será un array unidimensional donde se almacenará las ventas asociadas a un comercial. Luego tendrá los constructores vacíos y constructores con parámetros, los metodos getter y setter y los metodos toString y compareTo. En esta clase tengo la duda de si se implementa la interfaz Comparator o la interfaz Comparable según el enunciado anterior. Yo en principio iba a usar ambas interfaces y no sé si se pueden implementar ambas interfaces para ordenar según un criterio o según varios criterios.

La clase Principal tendrá el menú, la declaración del ArrayList de objetos donde se almacenará el objeto de la Clase Comercial2. Ahora estaba implementando el metodo entrar un comercial: cif, nombre, apellidos, trimestres o ventas asociadas.

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
/**
 *
 */
package supuesto2;
 
import java.util.ArrayList;
import java.util.Iterator;
import java.util.Scanner;
 
 
/**
 * @author Antonio
 *
 */
public class Lista {
 
	static Scanner lector = new Scanner(System.in);
	static final int FILAS = 2;
	static final int COLUMNAS = 4;
 
	static ArrayList<Comerciales2> listaComerciales = new ArrayList<Comerciales2>(); // Declaración y creación del	ArrayList Comerciales2
 
	 //crear el iterador para el ArrayList
	static Iterator<Comerciales2> it = listaComerciales.iterator();
	//declaramos el objeto de comerciales
	Comerciales2 comerciales = new Comerciales2();
 
	// ArrayList<Clase> miObjeto = new ArrayList<Clase>();
	// Clase objetoAux = new Clase();
	// miObjeto.add(new miObjeto("", "", ""));
 
	// añadir
	// al.add(20);
 
	// al.size()
	// al.get(1) en la posición 1
 
	public static void main(String[] args) {
 
		System.out.println("BIENVENIDOS A LA APLICACIÓN DE GESTIÓN DE VENTAS DE NUESTROS COMERCIALES");
 
		int opcion = 0;
 
		do {
			System.out.println("-------MENÚ PRINCIPAL--------\n"); // literal de carácter \n para espacio en blanco
			System.out.println("1.- entrada de datos de un comercial");
			System.out.println(
					"2.- listado de los datos de un trimestre ordenado por ventas de ese trimestre (nombre, apellidos, venta, trimestre)");
			System.out.println("3.- listado alfabéticos de los comerciales con sus ventas");
			System.out.println("4.- trimestre con mayores ventas");
			System.out.println("5.- salir");
			System.out.println("\n-----------------------------");
			System.out.println("ELIJE UNA OPCIÓN: ");
			opcion = Integer.valueOf(lector.nextInt());
 
			switch (opcion) {
			case 1:
 
				entradaComerciales();
 
				System.out.println("-----------------------------------------------------------");
				break;
			case 2:
 
				listarDatos();
 
				System.out.println("-----------------------------------------------------------");
				break;
			case 3:
				System.out.println("===========================================================");
				System.out.println("listado alfabéticos de los comerciales con sus ventas");
 
				System.out.println("-----------------------------------------------------------");
 
				break;
			case 4:
				System.out.println("===========================================================");
				System.out.println("trimestre con mayores ventas");
 
				System.out.println("-----------------------------------------------------------");
				break;
			case 5:
				System.exit(0);
				break;
			default:
				System.out.println("Por favor introduzca una opción válida entre 1 y 5...");
			}// fin switch(opcion)
		} while (opcion >= 1 || opcion <= 5);
 
	}// fin metodo main
 
	/**
	 * Entrada de un comercial
	 *
	 */
	private static void entradaComerciales() {
		// TODO Esbozo de método generado automáticamente
		System.out.println("===========================================================");
		System.out.println("entrada de datos de un comercial");
		int num = 0; // numero de registros insertados
		do {
			Scanner lector = new Scanner(System.in);
			Comerciales2 objComerciales = new Comerciales2();
			String cif;
			String nombre;
			String apellido1;
			String apellido2;
			double ventas[] = new double[4];
			System.out.println("COMERCIAL " + (num + 1));
			System.out.println("Introduzca cif: ");
			cif = lector.next();
			System.out.println("Introduzca nombre: ");
			nombre = lector.next();
			System.out.println("Introduzca apellido1: ");
			apellido1 = lector.next();
			System.out.println("Introduzca apellido2: ");
			apellido2 = lector.next();
 
			System.out.println("Introduzca ventas del primer trimestre: ");
			ventas[0] = lector.nextDouble();
			System.out.println("Introduzca ventas del segundo trimestre: ");
			ventas[1] = lector.nextDouble();
			System.out.println("Introduzca ventas del tercer trimestre: ");
			ventas[2] = lector.nextDouble();
			System.out.println("Introduzca ventas del cuarto trimestre: ");
			ventas[3] = lector.nextDouble();
 
//			objComerciales.setCif(cif);;
//			objComerciales.setNombre(nombre);
//			objComerciales.setApellido1(apellido1);
//			objComerciales.setApellido2(apellido2);
//			objComerciales.setVentas(ventas);
 
			objComerciales = new Comerciales2(cif, nombre, apellido1, apellido2, ventas);
			num++; // enumerando los comerciales insertados
 
			// almacenar el objeto de Comerciales 2 en un ArrayList<Comerciales2>
			for(int i=0;i<FILAS;i++) {
				listaComerciales.add(objComerciales);
			}
 
 
		} while (num < FILAS);
 
		// mostrar si el registro se ha insertado correctamente
		if (num > 0) {
			System.out.println("El registro se ha insertado correctamente. ");
			System.out.println("Se han insertado " + num);
		} else {
			System.out.println("Intente de nuevo: ");
		}
 
	}
 
	/**
	 * Listas los datos de comerciales
	 */
	private static void listarDatos() {
		// TODO Esbozo de método generado automáticamente
		System.out.println("===========================================================");
		System.out.println("listado de los datos de un trimestre ordenado por ventas de ese trimestre");
		// mostramos los registros insertados
		// mostrar los resultados guardados en la lista de Array Comerciales
		for (int i = 0; i < listaComerciales.size(); i++) {
			System.out.println("Comercial " + (i + 1) + " ");
			System.out.println("CIF: " + listaComerciales.get(i).getCif() + " Nombre: "
					+ listaComerciales.get(i).getNombre() + " Apellido 1: " + listaComerciales.get(i).getApellido1()
					+ " Apellido 2: " + listaComerciales.get(i).getApellido2() + " Ventas trimestre 1: " + listaComerciales.get(i).getVentas() + " Ventas trimestre 2: " + " Ventas trimestre 3: " + " Ventas trimestre 4: ");
		}
 
		//usamos el iterador para mostrar lista del ArrayList
		/*
		 * while(it.hasNext()) { //PROBLEMAS EN ESTA LÍNEA Comerciales2 comerciales =
		 * it.next(); System.out.println(comerciales.getCif() + " " +
		 * comerciales.getNombre() + " " + comerciales.getApellido1() + " " +
		 * comerciales.getApellido2() + " " + comerciales.getVentas() + " " +
		 * comerciales.getVentas());
		 *
		 *
		 * }
		 */
	}
 
}// fin clase

Creo que el metodo entradaComerciales() me funciona pero cuando pruebo el metodo listar los comerciales no me funciona. Creo que tiene que ver con algo del iterator. He probado con el metodo for y con el iterator para practicar ambas estructuras. Pero me sale un codigo raro con for. Esto es lo que me sale:

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
81
82
83
BIENVENIDOS A LA APLICACIÓN DE GESTIÓN DE VENTAS DE NUESTROS COMERCIALES
-------MENÚ PRINCIPAL--------
 
1.- entrada de datos de un comercial
2.- listado de los datos de un trimestre ordenado por ventas de ese trimestre (nombre, apellidos, venta, trimestre)
3.- listado alfabéticos de los comerciales con sus ventas
4.- trimestre con mayores ventas
5.- salir
 
-----------------------------
ELIJE UNA OPCIÓN:
1
===========================================================
entrada de datos de un comercial
COMERCIAL 1
Introduzca cif:
1
Introduzca nombre:
antonio
Introduzca apellido1:
garrido
Introduzca apellido2:
sanchez
Introduzca ventas del primer trimestre:
100
Introduzca ventas del segundo trimestre:
200
Introduzca ventas del tercer trimestre:
300
Introduzca ventas del cuarto trimestre:
400
COMERCIAL 2
Introduzca cif:
2
Introduzca nombre:
david
Introduzca apellido1:
sanchez
Introduzca apellido2:
jimenez
Introduzca ventas del primer trimestre:
250
Introduzca ventas del segundo trimestre:
450
Introduzca ventas del tercer trimestre:
350
Introduzca ventas del cuarto trimestre:
450
El registro se ha insertado correctamente.
Se han insertado 2
-----------------------------------------------------------
-------MENÚ PRINCIPAL--------
 
1.- entrada de datos de un comercial
2.- listado de los datos de un trimestre ordenado por ventas de ese trimestre (nombre, apellidos, venta, trimestre)
3.- listado alfabéticos de los comerciales con sus ventas
4.- trimestre con mayores ventas
5.- salir
 
-----------------------------
ELIJE UNA OPCIÓN:
2
===========================================================
listado de los datos de un trimestre ordenado por ventas de ese trimestre
Comercial 1
CIF: 1 Nombre: antonio Apellido 1: garrido Apellido 2: sanchez Ventas trimestre 1: [D@7d4991ad Ventas trimestre 2:  Ventas trimestre 3:  Ventas trimestre 4:
Comercial 2
CIF: 1 Nombre: antonio Apellido 1: garrido Apellido 2: sanchez Ventas trimestre 1: [D@7d4991ad Ventas trimestre 2:  Ventas trimestre 3:  Ventas trimestre 4:
Comercial 3
CIF: 2 Nombre: david Apellido 1: sanchez Apellido 2: jimenez Ventas trimestre 1: [D@28d93b30 Ventas trimestre 2:  Ventas trimestre 3:  Ventas trimestre 4:
Comercial 4
CIF: 2 Nombre: david Apellido 1: sanchez Apellido 2: jimenez Ventas trimestre 1: [D@28d93b30 Ventas trimestre 2:  Ventas trimestre 3:  Ventas trimestre 4: 
-----------------------------------------------------------
-------MENÚ PRINCIPAL--------
 
1.- entrada de datos de un comercial
2.- listado de los datos de un trimestre ordenado por ventas de ese trimestre (nombre, apellidos, venta, trimestre)
3.- listado alfabéticos de los comerciales con sus ventas
4.- trimestre con mayores ventas
5.- salir
 
-----------------------------
ELIJE UNA OPCIÓN:

No sé en lo que puede fallar o si hay algo del codigo en alguna parte. Me sale esto:
1
2
3
4
5
6
7
8
9
listado de los datos de un trimestre ordenado por ventas de ese trimestre
Comercial 1
CIF: 1 Nombre: antonio Apellido 1: garrido Apellido 2: sanchez Ventas trimestre 1: [D@7d4991ad Ventas trimestre 2:  Ventas trimestre 3:  Ventas trimestre 4:
Comercial 2
CIF: 1 Nombre: antonio Apellido 1: garrido Apellido 2: sanchez Ventas trimestre 1: [D@7d4991ad Ventas trimestre 2:  Ventas trimestre 3:  Ventas trimestre 4:
Comercial 3
CIF: 2 Nombre: david Apellido 1: sanchez Apellido 2: jimenez Ventas trimestre 1: [D@28d93b30 Ventas trimestre 2:  Ventas trimestre 3:  Ventas trimestre 4:
Comercial 4
CIF: 2 Nombre: david Apellido 1: sanchez Apellido 2: jimenez Ventas trimestre 1: [D@28d93b30 Ventas trimestre 2:  Ventas trimestre 3:  Ventas trimestre 4: 
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 25/02/2021 13:22:47
Clase Comerciales2

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
81
82
83
84
85
86
87
88
89
90
package supuesto2;
 
import java.util.Arrays;
import java.util.Comparator;
 
public class Comerciales2  {
	//variables de clase
	String cif;
	String nombre;
	String apellido1;
	String apellido2;
	double[] ventas; //almacenamos las ventas de cada trimestre
 
 
	public Comerciales2() {
		super();
		// TODO Esbozo de constructor generado automáticamente
	}
 
 
	public Comerciales2(String cif, String nombre, String apellido1, String apellido2, double[] ventas) {
		super();
		this.cif = cif;
		this.nombre = nombre;
		this.apellido1 = apellido1;
		this.apellido2 = apellido2;
		this.ventas = ventas;
	}
 
 
	public void setCif(String cif) {
		this.cif = cif;
	}
 
 
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
 
 
	public void setApellido1(String apellido1) {
		this.apellido1 = apellido1;
	}
 
 
	public void setApellido2(String apellido2) {
		this.apellido2 = apellido2;
	}
 
 
	public void setVentas(double[] ventas) {
		this.ventas = ventas;
	}
 
 
	public String getCif() {
		return cif;
	}
 
 
	public String getNombre() {
		return nombre;
	}
 
 
	public String getApellido1() {
		return apellido1;
	}
 
 
	public String getApellido2() {
		return apellido2;
	}
 
 
	public double[] getVentas() {
		return ventas;
	}
 
 
	@Override
	public String toString() {
		return "Comerciales2 [cif=" + cif + ", nombre=" + nombre + ", apellido1=" + apellido1 + ", apellido2="
				+ apellido2 + ", ventas=" + Arrays.toString(ventas) + "]";
	}
 
 
 
 
}//fin clase Comerciales2
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

Array bidimensional y Metodo añadir

Publicado por Kabuto (1381 intervenciones) el 26/02/2021 00:21:48
Ese código "raro", es porque a este system.out.println(), le estás pasando directamente el array de ventas, mediante el método getVentas()

1
2
3
4
5
System.out.println("CIF: " + listaComerciales.get(i).getCif() + " Nombre: "
					+ listaComerciales.get(i).getNombre() + " Apellido 1: " + listaComerciales.get(i).getApellido1()
					+ " Apellido 2: " + listaComerciales.get(i).getApellido2() +
                                            " Ventas trimestre 1: " + listaComerciales.get(i).getVentas() +
                                            " Ventas trimestre 2: " + " Ventas trimestre 3: " + " Ventas trimestre 4: ");

Entonces, el System.out no sabe como convertir ese array a texto, así que lo que muestra es el identificador interno de ese objeto (un array es como un objeto)

Eso no te ocurrirá si usas método toString() que has puesto después, donde ahora ese array se los pasas a la clase Arrays, quién si sabe como transformarlo en un texto presentable en pantalla.

1
2
3
4
5
public String toString() {
	return "Comerciales2 [cif=" + cif + ", nombre=" + nombre + ",
        apellido1=" + apellido1 + ", apellido2="
	+ apellido2 + ", ventas=" + Arrays.toString(ventas) + "]";
}
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 01/03/2021 10:44:17
Perfecto era usar la Clase Arrays y el metodo toString.

1
2
3
4
5
6
7
8
System.out.println("\n... Resultados usando un for ...");
for (int i = 0; i < listaComerciales.size(); i++) {
    System.out.println("Comercial " + (i + 1) + " ");
    System.out.println("CIF: " + listaComerciales.get(i).getCif() + " Nombre: "
            + listaComerciales.get(i).getNombre() + " Apellido 1: " + listaComerciales.get(i).getApellido1()
            + " Apellido 2: " + listaComerciales.get(i).getApellido2() + " Ventas trimestres(1,2,3,4): "
            + Arrays.toString(listaComerciales.get(i).getVentas()));
}


Ahora estoy intentado mostrar los resultados anteriores pero usando el iterador. Mi código es este:

1
2
3
4
5
6
7
8
9
10
// usamos el iterador para mostrar lista del ArrayList
System.out.println("\n... Resultados del Iterador ...");
 
 
// crear el iterador para el ArrayList
Iterator<Comerciales2> it = listaComerciales.iterator();
while (it.hasNext()) {
    System.out.println(it.next());
 
}


El problema es que me repite dos veces el resultado. Me sale:

1
2
3
4
5
... Resultados del Iterador ...
Comerciales2 [cif=1, nombre=antonio, apellido1=garrido, apellido2=sanchez, ventas=[150.0, 250.0, 350.0, 450.0]]
Comerciales2 [cif=1, nombre=antonio, apellido1=garrido, apellido2=sanchez, ventas=[150.0, 250.0, 350.0, 450.0]]
Comerciales2 [cif=2, nombre=david, apellido1=sanchez, apellido2=jimenez, ventas=[150.0, 250.0, 350.0, 450.0]]
Comerciales2 [cif=2, nombre=david, apellido1=sanchez, apellido2=jimenez, ventas=[150.0, 250.0, 350.0, 450.0]]

Si solo he insertado 2 registros en la aplicación, me debería mostrar 2 resultados y no cuatro.
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 01/03/2021 11:55:34
==================CONTINUACIÓN=============================
En las opciones 2 Listado de los datos de un trimestre ordenado por ventas (nombre, apellidos, ventas, trimestres)
y en la opción 3 Listado alfabéticos de los comerciales con sus ventas (apellidos, nombre, ventas) es donde tengo que trabajar la interfaz Comparable. En ese caso no usaré la interfaz Comparator. Me estaba leyendo lo que aportaste de la interfaz Comparable.

En la opcion 2 me pide un listado de los datos de un trimestre ordenado por ventas y el formato que me piden es nombre, apellidos, ventas trimestres. En este caso sería usar la interfaz Comparable. La clase Comerciales2 implementa la interfaz y luego se describe el método abstracto heredado.
Creo que la opción 2 es ordenar por trimestre y la opción 3 ordenar por ventas.... Aquí es donde me entra la duda porque entonces tendría que declarar otro array de tipo int donde meta los 4 trimestres para poderlos ordenar por trimestre.
Cuando hice la clase Comerciales2 solo almacené ventas de tipo double pero tendría que declarar otra variable donde almacene los 4 trimestres.

1
2
3
4
5
6
7
public class Comerciales2 implements Comparable<Comerciales2>  {
	//variables de clase
	String cif;
	String nombre;
	String apellido1;
	String apellido2;
	double[] ventas; //almacenamos las ventas de cada trimestre

En el enunciado pone lo siguiente:
1
2
3
2. Listado de los datos de un trimestre ordenado por ventas de ese trimestre (nombre, apellidos, venta trimestre)
 
3. Listado alfabéticos de los comerciales con sus ventas. El listado alfabéticos de los comerciales de la opción 3 se realizará con el siguiente formato apellidos, nombre.

Leyendo muchas veces, creo que la opción 2 es ordenar por ventas y la opción 3 es ordenar por apellidos. En todo caso tendría que poner double[] ventas a double[][] ventas para facilitar la labor. No sé si estoy en lo correcto. Porque si lo dejo por double[] ventas en la clase Comerciales2 no sé como se podría ordenar por ventas de un trimestre. ESTA ES UNA DUDA QUE TENGO.

LA OTRA DUDA QUE PLANTEÉ ES COMO SACAR EL RESULTADO DE ARRAYLLIST CON EL ITERADOR YA QUE ME REPETÍA LOS DATOS: 4 RESULTADOS EN LUGAR DE LOS DOS RESULTADOS CORRESPONDIENTES.
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

Array bidimensional y Metodo añadir

Publicado por Kabuto (1381 intervenciones) el 02/03/2021 02:17:10
Hola.

Primero, olvídate del Iterator. No debería fallarte, y no se por qué lo hace.
Pero da igual, no es necesario usarlo en un ArrayList. Esta colección es una lista secuencial, hay un elemento anterior y otro posterior..., así que los puedes recorrer usando un for normal, o también un "for each" que es básicamente un declaración simplificada de un for que va a recorrer una colección desde el principio hasta el final.

Sobre Comparable, Comparator y las distintas formas de ordenar que pide el enunciado.

Como ya expliqué en un mensaje anterior, los ArrayList incorporan el método sort() para ordenar los elementos que contienen.
Si al invocar este método, le proporcionamos un valor nulo --> .sort(null) ordenará los objetos según la regla que hayamos establecido mediante la interfaz Comparable, en la clase de dichos objetos.

Pero, si queremos cambiar la regla de ordenación, en lugar de pasarle un valor nulo, le podemos pasar un objeto Comparator, y entonces ignorará las reglas del Comparable
Para crear ese Comparator, podemos escribir una clase aparte que implementa esa interfaz.

Entonces, para este ejercicio, podemos usar el Comparable para ordenar por apellidos.

Y podemos usar el Comparator para ordenar por ventas trimestrales. ¿Y por qué esta elección?
Porque para ordenar por ventas trimestrales necesitamos aportar un dato extra, hay que elegir por cuál trimestre queremos ordenar.
Cada comercial tiene un array double con cuatro ventas trimestrales, y hay que indicar cuál de esos cuatro ventas, es decir, cuál de los cuatro elementos del array double (un valor entre 0 y 3) hay que tomar como referencia para ordenar.
Se supone que el programa da a elegir al usuario por cuál trimestre quiere ordenar. Así que unas veces podrá pedir ordenar por el primer trimestre (elemento [0] del array double), otras veces por el segundo trimestre (elemento [1]), etc...

Entonces, para la interfaz Comparable, es mejor usarla cuando la regla es fija. Por ejemplo ordenar por primer apellido, siempre va a ser el primero, no se va a elegir entre el segundo o el primero. Siempre el primero.

Con Comparator, como vamos a crear una clase con ella, aprovechándonos de las ventajas de la POO, a esta clase podemos darle un método para elegir en cada momento el trimestre por el que queremos ordenar.
Así podemos crear un objeto Comparator, establecer el trimestre que el usuario elija, y pasárselo al ArrayList para que ordene por dicho trimestre.

Esta clase Comparator, se puede escribir a parte, se puede escribir dentro del programa principal o se la podemos añadir a la clase Comerciales2 como una clase anidada en su interior. Como es algo íntimamente relacionado con Comerciales2, puede tener sentido que vaya incluido con ella. Pero vamos, no es necesario.

Veamos un ejemplo.
He cogido tu clase Comerciales2 y le he implementado la interfaz Comparable, de manera que ordene por primer apellido.

Además, le incluyo una clase anidada (importante que sea estática) a través de la cuál se puede crear un objeto Comparator que permite seleccionar el trimestre por el cuál ha de ordenar.

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
public class Comerciales2 implements Comparable<Comerciales2>{
	//variables de clase
	String cif;
	String nombre;
	String apellido1;
	String apellido2;
	double[] ventas; //almacenamos las ventas de cada trimestre
 
	public Comerciales2() {
		super();
		// TODO Esbozo de constructor generado automáticamente
	}
 
	public Comerciales2(String cif, String nombre, String apellido1, String apellido2, double[] ventas) {
		super();
		this.cif = cif;
		this.nombre = nombre;
		this.apellido1 = apellido1;
		this.apellido2 = apellido2;
		this.ventas = ventas;
	}
 
	public void setCif(String cif) {
		this.cif = cif;
	}
 
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
 
	public void setApellido1(String apellido1) {
		this.apellido1 = apellido1;
	}
 
	public void setApellido2(String apellido2) {
		this.apellido2 = apellido2;
	}
 
	public void setVentas(double[] ventas) {
		this.ventas = ventas;
	}
 
	public String getCif() {
		return cif;
	}
 
	public String getNombre() {
		return nombre;
	}
 
	public String getApellido1() {
		return apellido1;
	}
 
	public String getApellido2() {
		return apellido2;
	}
 
	public double[] getVentas() {
		return ventas;
	}
 
	@Override
	public String toString() {
		return "Comerciales2 [cif=" + cif + ", nombre=" + nombre + ", apellido1=" + apellido1 + ", apellido2="
				+ apellido2 + ", ventas=" + Arrays.toString(ventas) + "]";
	}
 
	@Override
	public int compareTo(Comerciales2 otroCom) {
		/*
		 * Se ordena por primer apellido.
		 * Si los apellidos fueran iguales, entonces
		 * se ordena por nombre
		 */
		if (apellido1.equals(otroCom.apellido1)) { //Apellidos iguales
			return nombre.compareTo(otroCom.nombre);
		}
		else
			return apellido1.compareTo(otroCom.apellido1);
	}
 
	/*
	 * Comparador que permite recibir un número de trimestre (entre 0 y 3) por
	 * su constructor para poder ordenar los Comerciales según las ventas de
	 * dicho trimestre.
	 */
	public static class ComparadorPorTrimestre implements Comparator<Comerciales2> {
 
		private int trimestre;//Trimestre elegido para comparar, entre 0 y 3
 
		public ComparadorPorTrimestre(int trimestre) {
			setTrimestre(trimestre);
		}
 
		public void setTrimestre(int trimestre) {
			this.trimestre = trimestre;
		}
 
		@Override
		public int compare(Comerciales2 com1, Comerciales2 com2) {
			double ventaDeCom1 = com1.getVentas()[trimestre];
			double ventaDeCom2 = com2.getVentas()[trimestre];
			return Double.compare(ventaDeCom1, ventaDeCom2);
		}
 
	}
 
}


Y ahora, una clase main para ponerla a prueba.

En ella creo un ArrayList de comerciales y le añado unos pocos objetos de prueba.

Primero muestro su contenido tal cuál, sin ordenar, usando un "for each" (nada de iteradores)

Luego invoco el método sort(), pasándole un valor nulo. Aquí ordenará según lo que diga la interfaz Comparable, es decir, por primer apellido.

Luego, creo un objeto Comparator de la clase ComparadorPorTrimestre. Esta es la clase que está anidada dentro de Comerciales2, por eso su declaración es un poco larga:
1
Comerciales2.ComparadorPorTrimestre ordTrimestre = new Comerciales2.ComparadorPorTrimestre(0);

Pero bueno, una vez creado, podemos usar su método setTrimestre() para cambiar el trimestre por el cuál se ha de ordenar.
Y lo que hago en el main de prueba es ordenar por el primer trimestre y mostrar resultado en pantalla.
Luego seteo al segundo trimestre, ordeno y muestro.
Luego el tercero y por último el cuarto.

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
import java.util.ArrayList;
 
public class PruebaComerciales2 {
 
	private static ArrayList<Comerciales2> comerciales;
 
	public static void main(String[] args) {
		comerciales = new ArrayList<Comerciales2>();
 
		comerciales.add(new Comerciales2("CIF001", "Paco", "Lopez", "Ramos",
				new double[] {15000, 12000, 18000, 9000}));
		comerciales.add(new Comerciales2("CIF002", "Sara", "Pelaez", "Soria",
				new double[] {14200, 13000, 17500, 10000}));
		comerciales.add(new Comerciales2("CIF003", "Luis", "Gomez", "Sanchez",
				new double[] {18000, 13500, 18000, 12000}));
		comerciales.add(new Comerciales2("CIF004", "Susana", "Alamo", "Vega",
				new double[] {19000, 10000, 7000, 18000}));
 
		//Mostramos array sin ordenar
		System.out.println("Listado sin ordenar...");
		for (Comerciales2 com: comerciales)
			System.out.println(com);
 
		//Ordenamos array según el comparable que implementa Comerciales2, que ordena por apellidos
		comerciales.sort(null);
		System.out.println("\nListado ordenado por apellidos...");
		for (Comerciales2 com: comerciales)
			System.out.println(com);
 
		//Ahora ordenaremos por trimestres, usando la clase ComparadorPorTrimestre
		//que está anidada en la clase Comerciales2.
		//Inicializamos para primer trimestre, valor 0
		Comerciales2.ComparadorPorTrimestre ordTrimestre = new Comerciales2.ComparadorPorTrimestre(0);
 
		//Primer trimestre
		System.out.println("\nListado ordenado por ventas del primer trimestre");
		comerciales.sort(ordTrimestre);
		for (Comerciales2 com: comerciales)
			System.out.println(com);
 
		//Segundo trimestre
		ordTrimestre.setTrimestre(1); //Seteamos el segundo trimestre
		System.out.println("\nListado ordenado por ventas del segundo trimestre");
		comerciales.sort(ordTrimestre);
		for (Comerciales2 com: comerciales)
			System.out.println(com);
 
		//Tercer trimestre
		ordTrimestre.setTrimestre(2);
		System.out.println("\nListado ordenado por ventas del tercer trimestre");
		comerciales.sort(ordTrimestre);
		for (Comerciales2 com: comerciales)
			System.out.println(com);
 
		//Cuarto trimestre
		ordTrimestre.setTrimestre(3);
		System.out.println("\nListado ordenado por ventas del cuarto trimestre");
		comerciales.sort(ordTrimestre);
		for (Comerciales2 com: comerciales)
			System.out.println(com);
 
	}
 
}

Y de este modo, podemos ver en pantalla todos los ordenamientos posibles:
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
Listado sin ordenar...
Comerciales2 [cif=CIF001, nombre=Paco, apellido1=Lopez, apellido2=Ramos, ventas=[15000.0, 12000.0, 18000.0, 9000.0]]
Comerciales2 [cif=CIF002, nombre=Sara, apellido1=Pelaez, apellido2=Soria, ventas=[14200.0, 13000.0, 17500.0, 10000.0]]
Comerciales2 [cif=CIF003, nombre=Luis, apellido1=Gomez, apellido2=Sanchez, ventas=[18000.0, 13500.0, 18000.0, 12000.0]]
Comerciales2 [cif=CIF004, nombre=Susana, apellido1=Alamo, apellido2=Vega, ventas=[19000.0, 10000.0, 7000.0, 18000.0]]
 
Listado ordenado por apellidos...
Comerciales2 [cif=CIF004, nombre=Susana, apellido1=Alamo, apellido2=Vega, ventas=[19000.0, 10000.0, 7000.0, 18000.0]]
Comerciales2 [cif=CIF003, nombre=Luis, apellido1=Gomez, apellido2=Sanchez, ventas=[18000.0, 13500.0, 18000.0, 12000.0]]
Comerciales2 [cif=CIF001, nombre=Paco, apellido1=Lopez, apellido2=Ramos, ventas=[15000.0, 12000.0, 18000.0, 9000.0]]
Comerciales2 [cif=CIF002, nombre=Sara, apellido1=Pelaez, apellido2=Soria, ventas=[14200.0, 13000.0, 17500.0, 10000.0]]
 
Listado ordenado por ventas del primer trimestre
Comerciales2 [cif=CIF002, nombre=Sara, apellido1=Pelaez, apellido2=Soria, ventas=[14200.0, 13000.0, 17500.0, 10000.0]]
Comerciales2 [cif=CIF001, nombre=Paco, apellido1=Lopez, apellido2=Ramos, ventas=[15000.0, 12000.0, 18000.0, 9000.0]]
Comerciales2 [cif=CIF003, nombre=Luis, apellido1=Gomez, apellido2=Sanchez, ventas=[18000.0, 13500.0, 18000.0, 12000.0]]
Comerciales2 [cif=CIF004, nombre=Susana, apellido1=Alamo, apellido2=Vega, ventas=[19000.0, 10000.0, 7000.0, 18000.0]]
 
Listado ordenado por ventas del segundo trimestre
Comerciales2 [cif=CIF004, nombre=Susana, apellido1=Alamo, apellido2=Vega, ventas=[19000.0, 10000.0, 7000.0, 18000.0]]
Comerciales2 [cif=CIF001, nombre=Paco, apellido1=Lopez, apellido2=Ramos, ventas=[15000.0, 12000.0, 18000.0, 9000.0]]
Comerciales2 [cif=CIF002, nombre=Sara, apellido1=Pelaez, apellido2=Soria, ventas=[14200.0, 13000.0, 17500.0, 10000.0]]
Comerciales2 [cif=CIF003, nombre=Luis, apellido1=Gomez, apellido2=Sanchez, ventas=[18000.0, 13500.0, 18000.0, 12000.0]]
 
Listado ordenado por ventas del tercer trimestre
Comerciales2 [cif=CIF004, nombre=Susana, apellido1=Alamo, apellido2=Vega, ventas=[19000.0, 10000.0, 7000.0, 18000.0]]
Comerciales2 [cif=CIF002, nombre=Sara, apellido1=Pelaez, apellido2=Soria, ventas=[14200.0, 13000.0, 17500.0, 10000.0]]
Comerciales2 [cif=CIF001, nombre=Paco, apellido1=Lopez, apellido2=Ramos, ventas=[15000.0, 12000.0, 18000.0, 9000.0]]
Comerciales2 [cif=CIF003, nombre=Luis, apellido1=Gomez, apellido2=Sanchez, ventas=[18000.0, 13500.0, 18000.0, 12000.0]]
 
Listado ordenado por ventas del cuarto trimestre
Comerciales2 [cif=CIF001, nombre=Paco, apellido1=Lopez, apellido2=Ramos, ventas=[15000.0, 12000.0, 18000.0, 9000.0]]
Comerciales2 [cif=CIF002, nombre=Sara, apellido1=Pelaez, apellido2=Soria, ventas=[14200.0, 13000.0, 17500.0, 10000.0]]
Comerciales2 [cif=CIF003, nombre=Luis, apellido1=Gomez, apellido2=Sanchez, ventas=[18000.0, 13500.0, 18000.0, 12000.0]]
Comerciales2 [cif=CIF004, nombre=Susana, apellido1=Alamo, apellido2=Vega, ventas=[19000.0, 10000.0, 7000.0, 18000.0]]

Ojo que yo muestro todos los datos en este ejemplo. En el enunciado se te pide ordenar, pero mostrar menos datos.

Y bueno, esta sería una posible manera de usar ambas interfaces, Comparable y Comparator, de distintas formas.
Puede parecer que hacen lo mismo, pero no son lo mismo.
Comparable siempre lo vamos a aplicar directamente a una clase.
Comparator en cambio lo usaremos para crear un objeto externo y pasárselo al método de ordenación que invoquemos.
En este ejemplo, hemos anidado la clase que implementa Comparator, dentro de la clase Comerciales2, pero esto no implica que forme parte de dicha clase.
Digamos que esto nos sirve para asegurarnos de que siempre van a "viajar" juntas. Allá donde tengamos la clase Comerciales2, dispondremos también de esa clase Comparator. Pero cada una sirve para crear objetos completamente distintos.

Se podría haber creado una clase separada, llamada por ejemplo Comparadores, y que tuviera anidadas un montón de clases Comparator que permitiesen crear objetos para ordenar por CIF, por nombre, por apellidos, por edades, por fechas de nacimiento... y por cualquier atributo que quisiéramos ponerle a nuestros comerciales.

No se si ha quedado todo bien explicado. Cualquier duda, solo tienes que preguntar.

Un saludo.
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 05/03/2021 13:30:04
Hola!!

Con respecto a lo del iterador, es porque me lo pedía en el ejercicio. Lo pondré como comentario para saber luego cuál podría ser el error.

Estoy acostumbrado a usar el for clásico pero sí conozco la estructura del forEach pero no estoy acostumbrado usarlo. Debo amplificar las estructuras que uso para enriquecer el código. Creo recordar que se usaba para arrays y colecciones solamente. Acabo de mirar la chuleta jeje.

Con respecto a la interfaz Comparable y Comparator, tenía dudas de si se podía usar ambas estructuras en un mismo ejercicio aunque solucionara distintas ordenaciones. Entiendo que la interfaz Comparable era para hacer ordenamiento natural y único y la interfaz Comparator para hacer un ordenamiento alternativo que necesite un dato extra como decías.
Claro al ordenar la opción 3 por apellidos es un ordenamiento natural y único. Por lo que se hace con la interfaz Comparable. Y al ordenar por ventas trimestrales intervienen trimestres y ventas por eso de ahí de usar la interfaz Comparator ya que era para hacer comparaciones múltiples. Es decir, ordenamos primero por trimestres y luego por ventas. De ahí a lo que comentabas con respecto a los datos extras. No sé si estoy en lo correcto.

En relación a la interfaz Comparable he estado leyendo la segunda parte del ejercicio anterior donde se comparaba ventas con otras ventas de otro objeto. En ese caso vi que se hacía de forma distinta porque se comparaban números. Pero ahora se comparan cadenas.

1
2
3
4
5
6
7
8
9
10
11
12
//si tratamos de comparar numeros con respecto a otros números
/*if(atributo < objComerciales.atributo) { //este atributo es menor que el otro
    return -1;
}
else if (atributo > objComerciales.atributo) { //este atributo es mayor que el otro
    return 1;
}
else return 0; //ambos atributos son iguales
*/
 
//otra forma de comparar ambos atributos más abreviada que la anterior cuando se compara números
//return Integer.compare(atributo, objComerciales.atributo);


Otra de mis dudas era cuando podía usar una clase anidada. Ahora entiendo algo mejor lo de las clases anidadas que venía en el temario pero no entendía su uso. Como lo explicas, si solo voy a usar un método dentro de esa clase estática anidada, lo podemos crear dentro de la clase principal. Pero si vamos a tener varios métodos de ordenar , sería aconsejable separar la clase de su clase principal. Veo que se puede usar varios metodos de ordenar: ordenar por nombre, ordenar por apellido 1, ordenar por edad, ordenar por altura. En ese caso sería crear una clase separada llamada Comparadores y meter todas las clases anidadas de comparaciones de un tipo con sus métodos. PERFECTO.
1
2
3
4
5
6
7
8
9
10
public class Comparadores {
   public static class CompararPorAtributo1 implements Comparator<ClasePrincipal> {
 
   }
 
   public static class CompararPorAtributo2 implements Comparator<ClasePrincipal> {
 
}
 
}//fin clase Comparadores

Tengo dudas con respecto a algunas líneas de código del método compare de la interfaz Comparator. Me imagino que la lógica es la misma que en la interfaz Comparable. Pero no entiendo que intenta hacer este código:

1
2
3
public ComparadorPorTrimestre(int trimestre) {
    setTrimestre(trimestre);
}

Después de este código entiendo que es un metodo setter. Después en el método compare(Comerciales2 com1, Comerciales2 com2) {} aparecen dos variables.
El código de abajo no lo entiendo:
1
2
double ventaDeCom1 = com1.getVentas()[trimestre];
double ventaDeCom2 = com2.getVentas()[trimestre];
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

Array bidimensional y Metodo añadir

Publicado por Kabuto (1381 intervenciones) el 06/03/2021 02:53:28
OK, voy a profundizar un poco sobre la clase ComparadorPorTrimestre que implementa la interfaz Comparator.
Espero no irme demasiado por las ramas...

Con esta clase, lo que queremos es construir un objeto Comparator que nos permita ordenar por un trimestre en concreto, un trimestre que el usuario pueda escoger.
Es decir, a este objeto que implementa Comparator, tenemos que hacerle llegar como dato externo, el número de trimestre por el cuál queremos ordenar.

Bien, cuando implementamos Comparator en una clase, esta interfaz nos obliga a sobreescribir (Override) el método compare(), el cuál recibe como parámetros dos objetos de la clase que han de ser comparados (de la clase Comerciales2 en este caso).
Me refiero al método que rodeo en rojo en esta imagen:

imagen_2021-03-06_020422

Ese es el método que hace la comparación, y como hemos dicho, en este caso tenemos que hacerle llegar un valor int indicando cuál trimestre ha de coger, de los 4 que hay en los arrays de ventas, para hacer la comparación.
Sería maravilloso, agregar este parámetro como argumento cuando se haga la llamada a este método. Es decir, en lugar de pasarle solo dos objetos Comercial, pues pasarle también un int con el trimestre.

Por desgracia, esto no es posible. Porque este método compare() es una obligación impuesta por la interfaz Comparator, y es esta interfaz quien decide los parámetros que ha de recibir su método.
Si intento pasarle un int, tal como señalo en color verde en la siguiente imagen, enseguida me subraya en rojo el método y la propia clase, indicándome que no estoy respetando lo estipulado por la interfaz Comparator.

imagen_2021-03-06_021230


Así que no puedo modificar la "firma" del método compare() para hacerle llegar el int con el trimestre a comparar.
Pero, si puedo establecer ese trimestre como atributo de clase, y dentro del código del compare(), acceder a él y utilizarlo.

Esta línea que no entiendes:
1
2
3
public ComparadorPorTrimestre(int trimestre) {
			setTrimestre(trimestre);
		}

Simplemente es el constructor de la clase ComparadorPorTrimestre. Al construirlo, recibe un int por constructor y lo setea como atributo.
Ese constructor lo llamo en aquella línea tan larga y fea:
1
Comerciales2.ComparadorPorTrimestre ordTrimestre = new Comerciales2.ComparadorPorTrimestre(0);

Ahí construyo un objeto, llamado ordTrimestre, que es de la clase ComparadorPorTrimestre, que implementa Comparator, y mediante constructor seteo el primer trimestre (el 0) como trimestre seleccionado para comparar cuando haya que ordenar.

Cuando quiero cambiar el trimestre por el que voy a ordenar, en lugar de crear un objeto nuevo, cambio el valor del atributo del objeto que ya tengo creado:
1
ordTrimestre.setTrimestre(2);

Y cuando quiero ordenar, llamo a sort y le paso el objeto:
1
comerciales.sort(ordTrimestre);
En esa línea, nosotros no lo vemos, pero sort() llamará al método compare(), para comparar los objetos Comerciales2 que contiene ese ArrayList

OK, pero ¿qué hace el código que le hemos escrito a compare() ?

1
2
3
4
5
6
@Override
		public int compare(Comerciales2 com1, Comerciales2 com2) {
			double ventaDeCom1 = com1.getVentas()[trimestre];
			double ventaDeCom2 = com2.getVentas()[trimestre];
			return Double.compare(ventaDeCom1, ventaDeCom2);
		}
De cada objeto Comercial que se va a comparar, com1 y com2, coge la venta trimestral del array de ventas, según el valor que tenga el atributo trimestre (entre 0 y 3)
El array de ventas lo obtengo mediante el método getVentas().
Tal vez te cuesta entenderlo porque lo he escrito muy simplificado. Quizás si lo escribo de esta otra manera, entiendas mejor la lógica que se está siguiendo:
1
2
3
4
5
6
7
8
9
10
11
12
@Override
		public int compare(Comerciales2 com1, Comerciales2 com2) {
			//Obtengo arrays de ventas de cada comercial
			double[] arrayVentasComercial1 = com1.getVentas();
			double[] arrayVentasComercial2 = com2.getVentas();
			//De estos arrays, selecciono las ventas que indica el atributo trimestre
			double ventaDeCom1 = arrayVentasComercial1[trimestre];
			double ventaDeCom2 = arrayVentasComercial2[trimestre];
			//Ya tengo ambas ventas trimestrales, que son valores double.
			//Se los paso a la clase Double para que ella se encargue de compararlas
			return Double.compare(ventaDeCom1, ventaDeCom2);
		}


Sobre el Iterator. No se por qué te fallaba, ¿Seguro que solo insertastes dos objetos? Puedes probar a imprimir en pantalla el valor de listaComerciales.size(), a ver si es 2.
Quizás es 4 y por algún motivo se te insertaron dos veces el mismo registro.

Porque el código de tu Iterator era correcto.
He hecho yo una prueba en el código del último programa que puse, y me funciona bien.

1
2
3
4
5
6
		//Mostramos array sin ordenar
		System.out.println("Listado sin ordenar...");
		Iterator<Comerciales2> it = comerciales.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
		}


Acerca de la diferencia entre Comparable y Comparator.

La principal diferencia es que la interfaz Comparable, es para "enseñarle" a una clase, cómo ha de compararse ella misma con otros objetos de su misma clase.
Es decir, con ella le enseñamos a Comerciales2 cómo ha de compararse con otros Comerciales2
Digamos que es un comparador "interno", está integrado en la propia clase Comerciales2

En cambio, con Comparator, lo que hacemos es enseñarle a una clase, cómo ha de comparar objetos de otras clases que no tienen nada que ver con ella misma.
Es decir, a la clase ComparadorPorTrimestre le hemos enseñado cómo ha de comparar objetos de la clase Comerciales2.
Sería un comparador "externo", no está integrado en la clase Comerciales2

Aunque en este ejercicio, como algo especial, este comparador lo hemos escrito como clase anidada dentro de Comerciales2, pero como ya dije anteriormente, eso no significa que ese Comparator forme parte de un objeto Comerciales2, en cambio, el Comparable si forma parte del objeto.

Por eso, al llamar a sort, si no le pasamos ningún Comparator
1
comerciales.sort(null);
Pues aquí el sort() le pregunta a los propios objetos Comerciales2 qué dice su comparador "interno" acerca de cómo han de ordenarse.

En cambio, si le pasamos un Comparator:
1
comerciales.sort(ordTrimestre);
Ahora quien decide como será el ordenamiento, será este comparador "externo"

Espero haber aclarado dudas.
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 10/03/2021 12:23:19
Hola de nuevo!!
Sí no caí en la cuenta que era un constructor con parámetro la línea de código:
1
2
3
4
5
6
7
8
/**
		 * Constructor con el parámetro trimestre
		 * Le asignamos él metodo setTrimestre(trimestre) para poderlo definir más tarde
		 * @param trimestre
		 */
		public ComparadorPorTrimestre(int trimestre) {
			setTrimestre(trimestre);
		}

Claro no tiene constructor vacío porque no vamos a inicializar los parámetros.

Luego más tarde asignamos el valor con el metodo setter.

Y en el método compare ya podemos usar la variable trimestre.

Con respecto a la lógica del método compare, veo que es una forma simplificada de la segunda forma que me has escrito. Lógicamente en programación hay que ahorrar líneas de código pero como soy novel aún me quedo con la segunda forma referenciando a la primera también.

Ya encontré el error de proque me salía 4 datos y no 2 datos.

1
2
3
// almacenar el objeto de Comerciales 2 en un ArrayList<Comerciales2>
 
			 for (int i = 0; i < FILAS; i++) { listaComerciales.add(objComerciales); }


No lo tenía que meter dentro del for.
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 10/03/2021 12:37:06
=====CONTINUACIÓN=============

Ahora tengo un nuevo problema y no sé donde está el error.

Mi clase Comercial2 es la siguiente:

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
package supuesto2;
 
import java.util.Arrays;
import java.util.Comparator;
/**
 * La clase tiene una interfaz Comparable para hacer un ordenado natural y único
 *
 *
 */
public class Comerciales2 implements Comparable<Comerciales2>  {
	//variables de clase
	String cif;
	String nombre;
	String apellido1;
	String apellido2;
	double[] ventas; //almacenamos las ventas de cada trimestre
 
 
	public Comerciales2() {
		super();
		// TODO Esbozo de constructor generado automáticamente
	}
 
 
	public Comerciales2(String cif, String nombre, String apellido1, String apellido2, double[] ventas) {
		super();
		this.cif = cif;
		this.nombre = nombre;
		this.apellido1 = apellido1;
		this.apellido2 = apellido2;
		this.ventas = ventas;
	}
 
 
	public void setCif(String cif) {
		this.cif = cif;
	}
 
 
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
 
 
	public void setApellido1(String apellido1) {
		this.apellido1 = apellido1;
	}
 
 
	public void setApellido2(String apellido2) {
		this.apellido2 = apellido2;
	}
 
 
	public void setVentas(double[] ventas) {
		this.ventas = ventas;
	}
 
 
	public String getCif() {
		return cif;
	}
 
 
	public String getNombre() {
		return nombre;
	}
 
 
	public String getApellido1() {
		return apellido1;
	}
 
 
	public String getApellido2() {
		return apellido2;
	}
 
 
	public double[] getVentas() {
		return ventas;
	}
 
 
	@Override
	public String toString() {
		return "Comerciales2 [cif=" + cif + ", nombre=" + nombre + ", apellido1=" + apellido1 + ", apellido2="
				+ apellido2 + ", ventas=" + Arrays.toString(ventas) + "]";
	}
 
 
	/**
	 * Método abstracto heredado de la interfaz Comparable
	 * Resultado del metodo: -1 si un atributo es menor que otro
	 * Resultado del metodo: 1 si un atributo es mayor que otro
	 * Resultado del metodo: 0 si ambos atributos son iguales
	 * La opción 3 se ordena por primer apellido (si son distintos los apellidos).
	 * Si los apellidos son iguales, entonces se ordena por nombre
	 */
	@Override
	public int compareTo(Comerciales2 objComerciales) {
 
 
		//comparamos cadenas
		if(apellido1.equals(objComerciales.apellido1)) { //apellidos iguales resultado 0
			return nombre.compareTo(objComerciales.nombre);
		}
		else return apellido1.compareTo(objComerciales.apellido1); //apellidos distintos
 
 
		//si tratamos de comparar numeros con respecto a otros números
		/*if(atributo < objComerciales.atributo) { //este atributo es menor que el otro
			return -1;
		}
		else if (atributo > objComerciales.atributo) { //este atributo es mayor que el otro
			return 1;
		}
		else return 0; //ambos atributos son iguales
		*/
 
		//otra forma de comparar ambos atributos más abreviada que la anterior cuando se compara números
		//return Integer.compare(atributo, objComerciales.atributo);
 
 
 
 
	}
 
 
	/**
	 * Clase anidada ComparadorPorTrimestre que implementa la interfaz Comparator<Comerciales2>
	 *
	 *
	 */
 
	public class ComparadorPorTrimestre implements Comparator<Comerciales2> {
 
		//establecemos trimestre como variable de clase
		private int trimestre; //trimestre 0, 1, 2, 3
 
 
 
		/**
		 * Constructor con el parámetro trimestre
		 * Le asignamos él metodo setTrimestre(trimestre) para poderlo definir más tarde
		 * @param trimestre
		 */
		public ComparadorPorTrimestre(int trimestre) {
			setTrimestre(trimestre);
		}
 
 
 
		/**
		 * Método setter que asigna el valor a trimestre
		 * @param trimestre
		 */
		public void setTrimestre(int trimestre) {
			this.trimestre = trimestre;
		}
 
 
 
		/**
		 * Método abstracto heredado de ComparadorPorTrimestre
		 * @return Este método deberá de devolver un valor negativo si el primer argumento es menor que el segundo,
		 * un cero si los dos argumentos son iguales
		 * y un número positivo si el primer elemento es mayor que el segundo
		 */
		@Override
		public int compare(Comerciales2 objComerciales1, Comerciales2 objComerciales2) {
			//obtener dos arrays de ventas de cada comercial para poder comparar
			double[] arrayVentasCom1 = objComerciales1.getVentas();
			double[] arrayVentasCom2 = objComerciales2.getVentas();
 
			//de los dos arrays, seleccionar las ventas que indica el atributo trimestre
			double ventasComercial1 = arrayVentasCom1[trimestre];
			double ventasComercial2 = arrayVentasCom2[trimestre];
			//como consecuencia ya tenemos ambas ventas trimestrales
			//Se los paso a la clase Double para que ella se encargue de compararlas
			return Double.compare(ventasComercial1, ventasComercial2);
		}
 
	}//fin clase ComparadorPorTrimestre
 
 
}//fin clase Comerciales2

Mi clase Lista es la siguiente:

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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
package supuesto2;
 
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.Scanner;
 
import supuesto2.Comerciales2.ComparadorPorTrimestre;
 
 
/**
 * @author Antonio
 *
 */
public class Lista {
 
	static Scanner lector = new Scanner(System.in);
	static final int FILAS = 2; // NUMERO DE COMERCIALES
 
 
	static ArrayList<Comerciales2> listaComerciales = new ArrayList<Comerciales2>(); // Declaración y creación del
																						// ArrayList Comerciales2
 
	// declaramos el objeto de comerciales
	Comerciales2 comerciales = new Comerciales2();
 
	public static void main(String[] args) {
 
		System.out.println("BIENVENIDOS A LA APLICACIÓN DE GESTIÓN DE VENTAS DE NUESTROS COMERCIALES");
 
		int opcion = 0;
 
		do {
			System.out.println("=========MENÚ PRINCIPAL=========\n"); // literal de carácter \n para espacio en blanco
			System.out.println("1.- entrada de datos de un comercial");
			System.out.println(
					"2.- listado de los datos de un trimestre ordenado por ventas de ese trimestre (nombre, apellidos, ventas trimestrales)");
			System.out.println("3.- listado alfabéticos de los comerciales con sus ventas (apellidos, nombre, ventas)");
			System.out.println("4.- trimestre con mayores ventas");
			System.out.println("5.- salir");
			System.out.println("\n================================");
			System.out.println("ELIJE UNA OPCIÓN: ");
			opcion = Integer.valueOf(lector.nextInt());
 
			switch (opcion) {
			case 1:
 
				entradaComerciales();
 
				System.out.println("-----------------------------------------------------------");
				break;
			case 2:
 
				listarDatosVentasTrimestrales();
 
				System.out.println("-----------------------------------------------------------");
				break;
			case 3:
				listarDatosOrdenarApellidos();
				System.out.println("-----------------------------------------------------------");
 
				break;
			case 4:
				trimestreConMayoresVentas();
 
				System.out.println("-----------------------------------------------------------");
				break;
			case 5:
				System.exit(0);
				break;
			default:
				System.out.println("Por favor introduzca una opción válida entre 1 y 5...");
			}// fin switch(opcion)
		} while (opcion >= 1 || opcion <= 5);
 
	}// fin metodo main
 
	/**
	 * Metodo para introducir comerciales en un objeto y después en un ArrayList
	 *
	 */
	private static void entradaComerciales() {
		// TODO Esbozo de método generado automáticamente
		System.out.println("===========================================================");
		System.out.println("entrada de datos de un comercial");
		int num = 0; // numero de registros insertados
		do {
			Scanner lector = new Scanner(System.in);
			Comerciales2 objComerciales = new Comerciales2();
			String cif;
			String nombre;
			String apellido1;
			String apellido2;
			double ventas[] = new double[4];
			System.out.println("COMERCIAL " + (num + 1));
			System.out.println("Introduzca cif: ");
			cif = lector.next();
			System.out.println("Introduzca nombre: ");
			nombre = lector.next();
			System.out.println("Introduzca apellido 1: ");
			apellido1 = lector.next();
			System.out.println("Introduzca apellido 2: ");
			apellido2 = lector.next();
 
			System.out.println("Introduzca ventas del primer trimestre: ");
			ventas[0] = lector.nextDouble();
			System.out.println("Introduzca ventas del segundo trimestre: ");
			ventas[1] = lector.nextDouble();
			System.out.println("Introduzca ventas del tercer trimestre: ");
			ventas[2] = lector.nextDouble();
			System.out.println("Introduzca ventas del cuarto trimestre: ");
			ventas[3] = lector.nextDouble();
 
//			objComerciales.setCif(cif);;
//			objComerciales.setNombre(nombre);
//			objComerciales.setApellido1(apellido1);
//			objComerciales.setApellido2(apellido2);
//			objComerciales.setVentas(ventas);
 
			objComerciales = new Comerciales2(cif, nombre, apellido1, apellido2, ventas);
			num++; // enumerando los comerciales insertados
 
			// almacenar el objeto de Comerciales 2 en un ArrayList<Comerciales2>
			listaComerciales.add(objComerciales);
 
		} while (num < FILAS);
 
		// mostrar si el registro se ha insertado correctamente
		if (num > 0) {
			System.out.println("El registro se ha insertado correctamente. ");
			System.out.println("Se han insertado " + num);
		} else {
			System.out.println("Intente de nuevo: ");
		}
 
	}
 
	/**
	 * Método para mostrar los registros insertados sin ordenar y ordenar primero por trimestre
	 * y después ordenar por ventas de ese trimestre de ese trimestre
	 * Formato: nombre - apellido 1 - apellido 2 - ventas
	 * trimestrales
	 *
	 */
	private static void listarDatosVentasTrimestrales() {
		System.out.println("Listado de los datos de un trimestre ordenado por ventas de ese trimestre");
		System.out.println("=========================================================================");
 
		// mostrar los resultados guardados en la lista de Array Comerciales
 
 
 
		/*
		 * // usamos el iterador para mostrar lista del ArrayList
		 * System.out.println("\n... Resultados del Iterador sin ordenar ...");
		 *
		 * // crear el iterador para el ArrayList Iterator<Comerciales2> it =
		 * listaComerciales.iterator(); while (it.hasNext()) {
		 * System.out.println(it.next());
		 *
		 * }
		 */
 
		System.out.println("Listado sin ordenar: ");
		for(Comerciales2 i: listaComerciales) {
			System.out.println(i);
		}
 
 
		//Ordenamos array según el comparable que implementa Comerciales2, que ordena por apellidos
		listaComerciales.sort(null);
		//no vamos a mostrar los resultados
 
		//Ahora ordenamos por trimestres usando la clase ComparadorPorTrimestre
		//inciializamos el valor 0 para el primer trimestre
		Comerciales2.ComparadorPorTrimestre ordenarTrimestre = new Comerciales2.ComparadorPorTrimestre(0);
 
		//primer trimestre
		System.out.println("Listado ordenado por ventas del primer trimestre");
		listaComerciales.sort(ordenarTrimestre);
		//mostramos resultado
		for(Comerciales2 i: listaComerciales) {
			System.out.println(i);
		}
 
		//segundo trimestre
		ordenarTrimestre.setTrimestre(1);
		System.out.println("Listado ordenado por ventas del segundo trimestre");
		listaComerciales.sort(ordenarTrimestre);
		//mostramos resultado
		for(Comerciales2 i: listaComerciales) {
			System.out.println(i);
		}
 
		//tercer trimestre
		ordenarTrimestre.setTrimestre(2);
		System.out.println("Listado ordenado por ventas del tercer trimestre");
        listaComerciales.sort(ordenarTrimestre);
    	//mostramos resultado
		for(Comerciales2 i: listaComerciales) {
			System.out.println(i);
		}
 
		//cuarto trimestre
		ordenarTrimestre.setTrimestre(3);
		System.out.println("Listado ordenado por ventas del cuarto trimestre");
        listaComerciales.sort(ordenarTrimestre);
    	//mostramos resultado
		for(Comerciales2 i: listaComerciales) {
			System.out.println(i);
		}
 
	}// fin metodo
 
	/**
	 * Método que lista los comerciales con sus ventas ordenados por el primer
	 * apellido
	 * Formato: apellido 1, apellido 2, nombre, ventas
	 */
	private static void listarDatosOrdenarApellidos() {
 
		System.out.println(
				"Listado alfabéticos de los comerciales con sus ventas (apellidos 1, apellidos 2, nombre, ventas)");
		System.out.println("========================================================================================");
		// mostramos array sin ordenar con foreach
		System.out.println("Listado sin ordenar: ");
		/*
		 * // for(ClasePrincipal i: objeto del ArrayList) for (Comerciales2 i :
		 * listaComerciales) { System.out.println(i); }
		 */
 
 
		// crear el iterador para el ArrayList
		Iterator<Comerciales2> it = listaComerciales.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
 
		}
 
		// ordenamos array según la interfaz Comparable que implementa Comerciales2: que
		// ordena según apellidos
		listaComerciales.sort(null);
		System.out.println("\n================Listado ordenado por apellidos===============");
		System.out.println("\nApellido 1-----Apellido 2------Nombre-----Ventas\n");
		for (int i = 0; i < listaComerciales.size(); i++) {
			System.out.println(listaComerciales.get(i).getApellido1() + " " + listaComerciales.get(i).getApellido2() + ", " + listaComerciales.get(i).getNombre() + "==>Ventas (trimestre 1, 2, 3, 4) " + Arrays.toString(listaComerciales.get(i).getVentas()));
		}
 
	}
 
	private static void trimestreConMayoresVentas() {
 
		System.out.println("trimestre con mayores ventas");
		System.out.println("===========================================================");
		System.out.println("Listado sin ordenar: ");
		// crear el iterador para el ArrayList
		Iterator<Comerciales2> it = listaComerciales.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
 
		}
 
	}
 
}// fin clase

El error está en el método estático listarDatosVentasTrimestrales() de la clase Lista. Más concretamente:
1
Comerciales2.ComparadorPorTrimestre ordenarTrimestre = new Comerciales2.ComparadorPorTrimestre(0);
Comerciales2 es la otra clase y después del punto es el metodo pero aún así cuando creo el objeto me sale después del igual en rojo.
El mensaje que me sale: no hay ninguna instancia delimitadora del tipo Comerciales2 que sea accesible.....
Creo que me pide un objeto de tipo new vacio pero no consigo dar con la tecla.
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

Array bidimensional y Metodo añadir

Publicado por Kabuto (1381 intervenciones) el 11/03/2021 00:37:33
La clase anidada que implementa Comparator, ha de ser estática

1
2
3
4
5
6
7
8
9
10
/**
 * Clase anidada ComparadorPorTrimestre que implementa la interfaz Comparator<Comerciales2>
 *
 *
 */
 
public static class ComparadorPorTrimestre implements Comparator<Comerciales2> {
 
    //establecemos trimestre como variable de clase
    private int trimestre; //trimestre 0, 1, 2, 3
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 15/03/2021 11:40:19
Hola!
Estuve revisando la lógica del algoritmo trimestre con mayores ventas en la clase Comerciales1 (Comerciales1). En ese caso era el supuesto 1. Pero ahora tengo que averiguar el supuuesto 2 (Comerciales2 y Lista).
En Comerciales2 y Lista tengo que implementar el mismo método. pero me pilla por sorpresa proque ahora los resultados de cada trimestre en Lista están dentro del metodo entradaComerciales. En dicho método introducía los datos de cada trimestre. Claro que tengo que sumar los trimestres de cada comercial para averiguar la venta total de cada comercial. Pero aquí en Lista y Comerciales2 las variables están en distinto lugar. Mi pregunta es si hay algún metodo para poder acceder a la venta del trimestre 1 del arraylist del comercial tal para poder sumas todos los trimestres 1 porque luego tendría que comparar los totales de cada trimestres. Pero no sé cómo enfocarlo para poder acceder a la venta del trimestre 1 de todos los comerciales que he insertado en el arraylist de comercial. Arrays.toString() accedía a todos los resultados del array de ventas del arraylist de comercial insertado. Pero no a una parte del array de ventas: trimestre 1, trimestre 2, trimestre 3 O trimestre 4.
Al principio de la clase Lista declaré el ArrayList Comercial y es ahí donde se guarda la información referente a las ventas de un trimestre también no sólo en el metodo entradaComerciales(). También el comerciales de la clase Comerciales2 tiene información referente a las ventas de cada trimestre. Así que deduzco que ahí está la clave para poder hacer la suma de los comerciales de cada trimestre. Pero tengo que tener en cuenta que sólo era un array de ventas unidimensional y no como en el supuesto 1 que era un array de ventas bidimensional. En el supuesto 2 tenemos que hacer lo siguiente:
Trimestre 1: sumar todos los comerciales
Trimestre 2: sumar todos los comerciales
Trimestre 3: sumar todos los comerciales
Trimestre 4: sumar todos los comerciales

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
/**
	 * Método que saca el trimestre con mayores ventas
	 * lo que quiero es acceder al ArrayList de Comerciales2 y en concreto al array de ventas double para  valor del trimestre 1
	 * Y así con el valor del trimestre 2  pero siempre de cada comercial. Es decir, el primer arraylist tendría el trimestre 1 del primer comercial
	 * el arraylist 2 tendrá el trimestre 1 del segundo comercial y así sucesivamente.
	 * No sé si este enfoque se podría hacer así.
	 */
	private static void trimestreConMayoresVentas() {
 
		System.out.println("trimestre con mayores ventas");
		System.out.println("===========================================================");
		System.out.println("Listado sin ordenar: ");
		// crear el iterador para el ArrayList
		Iterator<Comerciales2> it = listaComerciales.iterator();
		while (it.hasNext()) {
			System.out.println(it.next());
 
		}
 
 
 
 
		// sumar las ventas de cada trimestre 1, trimestre 2, trimestre 3,
		// trimestre 4 de cada comercial para saber la venta total de cada trimestre
		// almacenmos el resultado de la suma de un trimestre en un array de 4 elementos o variable????
		double[] ventasTotales = new double[4];
 
		for(int i=0;i<FILAS;i++) {
			System.out.println(comerciales.getVentas()); //me genera null
			System.out.println(Arrays.toString(listaComerciales.get(i).getVentas()));
		}
		}
 
		//double mayor = 0; // importe de mayor venta
		//int trimestre = 0; // numero de trimestre con mayor venta
 
 
 
	}

En el código estaba practicando la manera de sacar el trimestre 1 de un comercial aunque creo que tendría que enfocarlo con una variable adicional para guardar los resultados de cada ventas

Pienso que en el for que intento generar debería poner un if (si el resultado coincide con el trimestre 1) almacenarlo en una variable. O que la clase Arrays tenga algún metodo para que me de una parte de un array de ventas. No sé si voy mal enfocado.
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 15/03/2021 12:14:37
Voy a intentar declarar una nueva variable al principio de la clase Lista:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class Lista {
 
	static Scanner lector = new Scanner(System.in);
	static final int FILAS = 2; // NUMERO DE COMERCIALES
 
	static ArrayList<Comerciales2> listaComerciales = new ArrayList<Comerciales2>(); // Declaración y creación del
																						// ArrayList Comerciales2
 
	// declaramos el objeto de comerciales
	static Comerciales2 comerciales = new Comerciales2();
 
 
	//almacenar la suma de ventas del trimestre 1...
	static double[] sumaVentas = new double[4];
	}

Después en el metodo entradaComerciales() modificaré:

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
private static void entradaComerciales() {
		// TODO Esbozo de método generado automáticamente
		System.out.println("===========================================================");
		System.out.println("entrada de datos de un comercial");
		int num = 0; // numero de registros insertados
		do {
			Scanner lector = new Scanner(System.in);
			Comerciales2 objComerciales = new Comerciales2();
			String cif;
			String nombre;
			String apellido1;
			String apellido2;
			double ventas[] = new double[4];
 
			System.out.println("COMERCIAL " + (num + 1));
			System.out.println("Introduzca cif: ");
			cif = lector.next();
			System.out.println("Introduzca nombre: ");
			nombre = lector.next();
			System.out.println("Introduzca apellido 1: ");
			apellido1 = lector.next();
			System.out.println("Introduzca apellido 2: ");
			apellido2 = lector.next();
 
			for(int i=0;i<4;i++) {
				System.out.println("Introduzca trimestre " + (i+1));
				ventas[i] = lector.nextDouble();
				sumaVentas[i] = ventas[i];
			}
 
			objComerciales = new Comerciales2(cif, nombre, apellido1, apellido2, ventas);
			num++; // enumerando los comerciales insertados
 
			// almacenar el objeto de Comerciales 2 en un ArrayList<Comerciales2>
			listaComerciales.add(objComerciales);
 
 
 
		} while (num < FILAS);
 
 
 
		// mostrar si el registro se ha insertado correctamente
		if (num > 0) {
			System.out.println("El registro se ha insertado correctamente. ");
			System.out.println("Se han insertado " + num);
		} else {
			System.out.println("Intente de nuevo: ");
		}
 
	}

Ahora sería sumar las ventas totales de la posición del array donde están los trimestres 1 de cada comercial. Son 10 comerciales:

ventasTotales1[10] = sumaVentas[0] + sumaVentas[4] + sumaVentas[8] + sumaVentas[12] + sumaVentas[16] + sumaVentas[20].... y eso correspondería a las ventas totales del primer trimestre y así con todos los trimestres.

Pero acabo de darme la cuenta que la posición del array se resetea a 0 con lo que no sale de esta forma. Seguramente estaba la clave en el for cuando introducía los datos en el metodo entradaComerciales() para que la variable sumaVentas[i] se me fuera guardando los datos consecutivamente hasta llegar al comercial 10.

Seguramente habrá alguna forma más sencilla.
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 15/03/2021 12:34:53
================CONTINUACIÓN====================
me sale error en (probé con 2 comerciales):

ventasTotales1 = sumaVentas[0] + sumaVentas[4];
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 Rodrigo
Val: 2.041
Plata
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Rodrigo (623 intervenciones) el 15/03/2021 13:00:23
Si sumaVentas lo defines como un arreglo de 4 doubles, no esta bien usar el indice 4 o superior.
Los indices validos van de 0 a 3.
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 22/03/2021 13:13:11
Lo que pasa es que intentaba definir una nueva variable en la clase Lista para almacenar los resultados de las ventas pero ahora tenía que resolver el problema de que solo me sumase las ventas del trimestre 1, las ventas del trimestre 2, las ventas del trimestre 3 y las ventas del trimestre 4. Si uso un array unidimensional para almacenar ventas, el índice iría de 0 a 3 como dices pero no encuentro la manera de resolver como sumar las ventas del trimestre 1, 2, 3, 4 usando un array unidimensional.
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 Antonio
Val: 98
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Array bidimensional y Metodo añadir

Publicado por Antonio (31 intervenciones) el 22/03/2021 13:57:39
Al final usaré en Comerciales2 y Lista un array bidimensional para almacenar las ventas de cada trimestre. Para ello tendré que reestructurar parte del codigo junto con los metodo compare y demás.
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