Java - Ayuda con arrays - necesito registrar dos elementos(producto - stock ) pero tengo algunos problemas

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

Ayuda con arrays - necesito registrar dos elementos(producto - stock ) pero tengo algunos problemas

Publicado por Bengy Jammil (10 intervenciones) el 08/04/2019 05:33:41
Ayuda con arrays - necesito registrar dos elementos(producto - stock ) pero quiero hacer que al momento de registrar si el dato a ingresar ya existe solo aumente el stock y si no existe lo agregue como nuevo elemento y otro para borrar todo los datos alguien que me ayuda
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con arrays - necesito registrar dos elementos(producto - stock ) pero tengo algunos problemas

Publicado por Kabuto (1381 intervenciones) el 08/04/2019 13:58:16
Hola.

Vamos a suponer que estas usando dos arrays simples (con colecciones avanzadas tipo ArrayList sería más fácil, pero similar), uno siendo de tipo String para guardar el nombre del producto y otro de tipo int para la correspondiente cantidad de stock.

Lo que necesitas hacer es, cada vez que te introducen un producto, comprobar si ya existe en el array de nombres y así decidir si vas a registrar un nuevo producto o actualizar uno que ya existe.

Esto se puede solucionar de distintas formas. Una que se me ocurre a mi es valerse de un método que se encargue de recorrer el array de nombres buscando un nombre que coincida con el producto que acaban de introducir.
Si encuentra una coincidencia, el método devolverá la posicion del array donde ha encontrado dicho producto, así ya sabremos que posicion del otro array debemos sumar la cantidad de stock proporcionada.

Si el método no encuentra ningún nombre coincidente, devolverá -1, y así sabremos que podemos proceder a registrar un nuevo producto.


Como estamos usando arrays simples, tenemos que darles un tamaño fijo desde el principio. Pero necesitamos controlar en que posiciones tenemos productos introducidos y en cuales están todavía vacías.
Para esto podemos ayudarnos de una variable int que comenzará con valor 0 e irá aumentando cada vez que registramos un nuevo producto. Así este contador nos servirá de indice para saber hasta que posición de los arrays tenemos productos introducidos.


Lo ideal es que intentes resolverlo tú siguiendo o inspirándote en este proceso que he descrito. Haz más preguntas si no lo tienes claro.
En cualquier caso, te dejo aquí un código que he escrito yo, por si quieres verlo y probarlo. Pero repito que aprenderás más intentándolo hacer tú y equivocándote (equivocarse es la mejor forma de aprender) que simplemente copiando mi código.

Este es el código. Incluye varios comentarios explicando lo que hace, pero no dudes en preguntar cualquier cosa que no entiendas.

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
public final class Registrar {
 
	//Variables principales
	static String[] productos = new String[100]; //Para registrar nombres de producto
	static int[] stock = new int[100]; //Para registrar cantidad stock de cada producto
	static int indice = 0;  //Nos indica que posicion del array está libre para registrar
							//nuevo producto y stock
 
	//Método de apoyo
	static int existeProducto(String producto) {
 
		//La variable principal "indice" nos dice hasta donde debemos buscar
		for (int i = 0; i < indice; i++) {
			if (productos[i].equals(producto))
				return i; //Producto encontrado, devolvemos su posicion
		}
 
		return -1; //No se ha encontrado producto
	}
 
	//Programa principal
	public static void main(String[] args) {
		Scanner teclado = new Scanner(System.in);
		char continuar = 's'; //Con esta variable el usuario nos dirá cuando quiere terminar
 
		do {
			System.out.print("\nNombre producto: ");
			String producto = teclado.nextLine();
			System.out.print("Cantidad Stock: ");
			int cantidad = Integer.parseInt(teclado.nextLine());
 
			/*
			 * A continuacion pediremos a un método que nos diga si ya existe este producto.
			 * Si existe, el método nos proporcionará la posición que ocupa el producto en
			 * los arrays y tan solo tendremos que sumar el stock.
			 * 
			 *  Si el método devuelve el valor -1, es que este producto no existe y por lo 
			 *  tanto procederemos a registrarlo.
			 */
			int posicion = existeProducto(producto);
			if (posicion == -1) { //Registramos nuevo producto, solo si queda espacio libre
				if (indice < 100) {
					productos[indice] = producto;
					stock[indice] = cantidad;
					indice++; //El indice de los arrays aumenta porque hemos registrado un producto
					System.out.println("Producto registrado.\n");
				}
				else
					System.out.println("No hay espacio para nuevos productos\n");
			}
			else { //Producto ya existe, solo hay que aumentar el stock en la posicion obtenida
				stock[posicion] += cantidad;
				System.out.println("Producto actualizado.\n");
			}
 
			System.out.print("¿Continuar?(S/N): ");
			continuar = teclado.nextLine().toLowerCase().charAt(0);
 
		} while (continuar == 's');
 
		//Mostramos datos registrados
		System.out.println("\n\t\t\tDatos Registrados\n\t\t\t----- -----------\n");
		for (int i = 0; i < indice; i++) {
			System.out.printf("\tProducto: %-20s\tStock: %04d\n", productos[i], stock[i]);
		}
		System.out.println("\n\tTotal Registros: " + indice);
 
		System.out.println("\n\n\t\t\tFIN DE PROGRAMA");
		teclado.close();
	}
 
}

Y este es el resultado que obtengo en pantalla:
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
Nombre producto: Boligrafo Azul
Cantidad Stock: 20
Producto registrado.
 
¿Continuar?(S/N): s
 
Nombre producto: Boligrafo Negro
Cantidad Stock: 45
Producto registrado.
 
¿Continuar?(S/N): s
 
Nombre producto: Lapiz 2B
Cantidad Stock: 58
Producto registrado.
 
¿Continuar?(S/N): s
 
Nombre producto: Boligrafo Azul
Cantidad Stock: 23
Producto actualizado.
 
¿Continuar?(S/N): s
 
Nombre producto: Cartabon 30cm
Cantidad Stock: 45
Producto registrado.
 
¿Continuar?(S/N): n
 
			Datos Registrados
			----- -----------
 
	Producto: Boligrafo Azul      	Stock: 0043
	Producto: Boligrafo Negro     	Stock: 0045
	Producto: Lapiz 2B            	Stock: 0058
	Producto: Cartabon 30cm       	Stock: 0045
 
	Total Registros: 4
 
 
			FIN DE PROGRAMA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil
Val: 19
Ha disminuido su posición en 3 puestos en Java (en relación al último mes)
Gráfica de Java

Ayuda con arrays - necesito registrar dos elementos(producto - stock ) pero tengo algunos problemas

Publicado por Bengy Jammil (10 intervenciones) el 08/04/2019 21:44:56
Muchas gracias amigo me funciono - y lo pase a un jframe - ademas le agregue la función de que me avise si el stock es menor a la cantidad ingresada -

1
2
3
4
5
6
7
8
9
int xd = 100;
 
for (int j = 0; j < indice; j++) {
 
    if(stock[j] < xd){
        txtSalida.append("falta stock a este producto " + productos[j]+"\n");
        break;
    }
}

otra cosa como aria para eliminar un producto por su nombre
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

Ayuda con arrays - necesito registrar dos elementos(producto - stock ) pero tengo algunos problemas

Publicado por Kabuto (1381 intervenciones) el 09/04/2019 00:53:57
1
otra cosa como aria para eliminar un producto por su nombre

Hacer eso de forma correcta con arrays simples es muy complicado. No se puede borrar como tal, ya que los arrays son elementos estáticos.
Si le decimos que tiene 100 elementos, SIEMPRE va a tener 100 elementos.
Puedes sustituir el nombre del producto que quieres "borrar" por un espacio en blanco, pero no habrás borrado nada y solo conseguirás tener un array con nombres en blanco repartidos entre nombres de productos aún existentes, que luego te va a costar esfuerzo extra controlar estas posiciones "borradas" para reaprovecharlas cuando introduces nuevos productos, ya que estos nuevos productos antes de añadirse a la última posicion del array, debería comprobar si hay posiciones disponibles que hayan dejado anteriores productos que han sido "borrados".

Se puede usar algún truquito, como usar un tercer array donde controlar que posiciones estan libres y cuales ocupadas. Las posiciones libres pueden representarse con valor 0 y las ocupadas con valor 1. Así sabes que posiciones hay libres para guardar nuevos productos.


Pero vamos, antes que complicarse la vida así, mejor pasar a usar colecciones de datos dinámicas, como por ejemplo un ArrayList.

1
ArrayList <String> productos = new ArrayLis<String>();

Estas colecciones no hay que darles un tamaño fijo inicial. Van creciendo según se añaden elementos o decreciendo según se eliminan, así nunca te quedan huecos vacíos al borrar ni tienes que estar controlando indices.

Se añaden elementos con el método add()
1
productos.add("Lapices");

Se recuperan con el método get() indicándole la posición a recuperar:
1
nombreProducto = productos.get(2);

Y se eliminan elementos con el método remove()
1
productos.remove(2);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar