Java - Nombre de array

 
Vista:
sin imagen de perfil

Nombre de array

Publicado por Pepe Mtz. Ruano (6 intervenciones) el 27/01/2024 16:42:10
Buenas. Podréis imaginar por mi consulta que soy muy nuevo en esto...
La cuestión es: ¿ se puede poner de nombre a un array el contenido de otra variable?

Por ejemplo, si en String nombre="pepe", puedo llamar a un Array "pepe"? Y cómo cojo en contenido de la variable?.

Lo que quiero es hacer unos Arrays que tuviesen el nombre de una personas que yo le facilite por teclado...

Gracias y saludos
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

Nombre de array

Publicado por Kabuto (1381 intervenciones) el 27/01/2024 23:50:29
No, no puedes.
En un programa, las cosas han de estar "programadas", valga la redundancia.

Es decir, en tu programa vas a querer trabajar con esos arrays: introducir datos, buscar datos, modificarlos... ¿Cómo vas a escribir un programa que haga todo eso si en el momento de escribirlo no sabes que nombres van a tener?

Es decir, yo puedo recorrer este array con un bucle, porque se cuál es su nombre en el momento de escribir el programa

1
2
3
4
int[] misNumeros = new int[10];
 
for (int i = 0; i < misNumeros.length; i++)
    System.out.println("Valor: "  + misNumeros[i]);

Pero, si no se su nombre, porque este lo va a decidir el usuario y de hecho va a ser distinto cada vez que se ejecute el programa..., ¿cómo voy a poder escribir un código donde referirme a él para recorrerlo y/o modificarlo?

Por tanto, no se puede. Los nombres(referencias) de variables, clases y objetos las ha de decidir el programador en el momento de escribir el código.


Ahora bien, si tú lo que quieres es dar la posibilidad al usuario de crear un array cuando él quiera y poder "bautizarlo" a su gusto, lo que se puede hacer es crear una clase donde sus atributos sean un array y un String para recoger el nombre que elija el usuario.

Ese "nombre" no va a influir a nivel de código, porque en el código no lo vamos a usar para referenciar a los arrays(ya hemos explicado que no se puede), simplemente servirá para que el usuario pueda asignar unos nombres a los arrays que el decida crear en tiempo de ejecución.

Todo esto implica conocer programación orientada a objetos (POO), no se si ya has comenzado a aprender esta disciplina.

En cualquier caso, te dejo un ejemplo muy sencillo. Si no sabes POO puede que te suene a chino, pero bueno.

Primero escribimos la clase que modela un array (en este caso sera de int) y que tendrá un atributo donde darle un nombre.
Escribo unos métodos básicos donde por ejemplo podamos insertar un valor en una posición o también poder mostrar el contenido del array.
Fíjate que aunque el usuario le vaya a dar un nombre, aquí en el código en realidad ese nombre nos da igual. No lo vamos a usar para trabajar con el array(insisto, porque no es posible tal cosa)
Pero el array tendrá un nombre de cara al usuario, que este podrá elegir y usarlo para seleccionar el array con el cuál quiere trabajar.

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
public class ArrayConNombre {
 
	//Atributos
	private String nombre;
	private int[] valores;
 
	//Constructor
	public ArrayConNombre(String nombreArray, int longitud) {
		nombre = nombreArray;
		valores = new int[longitud];
	}
 
	//Métodos
	public String getNombre() {
		return nombre;
	}
 
	public int getLongitud() {
		return valores.length;
	}
 
	public void insertarValor(int valor, int posicion) {
		if (posicion < 0 || posicion >= valores.length)
			System.out.println("ERROR!. La posicion indicada está fuera del rango del array");
		else
			valores[posicion] = valor;
	}
 
	public void mostrarArray() {
		System.out.println("Datos del array: " + nombre);
		System.out.print("[");
		for (int valor: valores)
			System.out.print(valor + " ");
		System.out.println("]");
	}
 
}

Y ahora escribimos la clase principal. Aquí es donde, usando la clase que hemos escrito antes, el usuario podrá crear todos los arrays que el quiera escogiendo su nombre y su longitud.
Mediante un menú de opciones, podrá elegir un array dando su nombre e insetarle un valor o mostrarlo 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
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
import java.util.ArrayList;
import java.util.Scanner;
 
public class CreadorDeArrays {
 
	private static ArrayList<ArrayConNombre> arrays = new ArrayList<ArrayConNombre>();
	private static Scanner teclado = new Scanner(System.in);
 
	public static void main(String[] args) {
 
		int opcion = 0;
		do {
			System.out.println("\n\n\t\tMENU DE ARRAYS");
			System.out.println("\t\t---- -- ------");
			System.out.println("(1) -- Crear un array");
			System.out.println("(2) -- Insertar un valor en un array");
			System.out.println("(3) -- Mostrar un array");
			System.out.println("(4) -- TERMINAR PROGRAMA");
			opcion = Integer.parseInt(teclado.nextLine());
 
			switch(opcion) {
			case 1:
				crearArray();
				break;
			case 2:
				insertarValor();
				break;
			case 3:
				mostrarArray();
				break;
			case 4:
				System.out.println("\n\t\tFIN DE PROGRAMA");
				break;
			default:
				System.out.println("ERROR! Elija otra opcion");
			}
		}while(opcion != 4);
 
	}
 
	private static void crearArray() {
		System.out.print("Como se va a llamar el array?: ");
		String nombre = teclado.nextLine();
		System.out.print("Que longitud va a tener?: ");
		int longitud = Integer.parseInt(teclado.nextLine());
 
		arrays.add(new ArrayConNombre(nombre, longitud));
		System.out.println("Array creado!!");
	}
 
	private static void insertarValor() {
		System.out.print("Dime el nombre del array: ");
		String nombre = teclado.nextLine();
		System.out.print("Dime el valor que quieres insertar: ");
		int valor = Integer.parseInt(teclado.nextLine());
		System.out.print("Dime la posicion donde se debe insertar: ");
		int posicion = Integer.parseInt(teclado.nextLine());
 
		ArrayConNombre elegido = null;
		for (ArrayConNombre arr: arrays)
			if (arr.getNombre().equals(nombre))
				elegido = arr;
 
		if (elegido == null)
			System.out.println("No se ha encontrado un array con el nombre: " + nombre);
		else
			elegido.insertarValor(valor, posicion);
	}
 
	private static void mostrarArray() {
		System.out.print("Dime el nombre del array: ");
		String nombre = teclado.nextLine();
 
		ArrayConNombre elegido = null;
		for (ArrayConNombre arr: arrays)
			if (arr.getNombre().equals(nombre))
				elegido = arr;
 
		if (elegido == null)
			System.out.println("No se ha encontrado un array con el nombre: " + nombre);
		else
			elegido.mostrarArray();
	}
}


Ahora muestro un ejemplo de una ejecución de este programa.
Puede verse como se crean dos arrays con distintos nombres, y mediante estos nombres, podemos darles valores y mostrarlos.
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
MENU DE ARRAYS
		---- -- ------
(1) -- Crear un array
(2) -- Insertar un valor en un array
(3) -- Mostrar un array
(4) -- TERMINAR PROGRAMA
1
Como se va a llamar el array?: Temperaturas
Que longitud va a tener?: 3
Array creado!!
 
 
		MENU DE ARRAYS
		---- -- ------
(1) -- Crear un array
(2) -- Insertar un valor en un array
(3) -- Mostrar un array
(4) -- TERMINAR PROGRAMA
1
Como se va a llamar el array?: Salarios
Que longitud va a tener?: 4
Array creado!!
 
 
		MENU DE ARRAYS
		---- -- ------
(1) -- Crear un array
(2) -- Insertar un valor en un array
(3) -- Mostrar un array
(4) -- TERMINAR PROGRAMA
2
Dime el nombre del array: Temperaturas
Dime el valor que quieres insertar: 22
Dime la posicion donde se debe insertar: 0
 
 
		MENU DE ARRAYS
		---- -- ------
(1) -- Crear un array
(2) -- Insertar un valor en un array
(3) -- Mostrar un array
(4) -- TERMINAR PROGRAMA
2
Dime el nombre del array: Salarios
Dime el valor que quieres insertar: 1350
Dime la posicion donde se debe insertar: 3
 
 
		MENU DE ARRAYS
		---- -- ------
(1) -- Crear un array
(2) -- Insertar un valor en un array
(3) -- Mostrar un array
(4) -- TERMINAR PROGRAMA
3
Dime el nombre del array: Temperaturas
Datos del array: Temperaturas
[22 0 0 ]
 
 
		MENU DE ARRAYS
		---- -- ------
(1) -- Crear un array
(2) -- Insertar un valor en un array
(3) -- Mostrar un array
(4) -- TERMINAR PROGRAMA
3
Dime el nombre del array: Salarios
Datos del array: Salarios
[0 0 0 1350 ]
 
 
		MENU DE ARRAYS
		---- -- ------
(1) -- Crear un array
(2) -- Insertar un valor en un array
(3) -- Mostrar un array
(4) -- TERMINAR PROGRAMA
4
 
		FIN DE PROGRAMA

Esta es la única forma donde el usuario pueda elegir un nombre para sus arrays. Pero es importante comprender que este nombre es solo de cara al usuario y en tiempo de ejecución.
Dentro del código, no podemos utilizar de ninguna manera esos nombres para referirnos a los arrays. Necesitamos unos nombres concretos y ya predefinidos por el programador, de lo contrario, no es posible escribir ningún código.

No se si podrás entender el ejemplo que he escrito. Si no lo entiendes porque aún no sabes POO, no importa, guárdalo para cuando empieces a aprender programación orientada a objetos, quizás te resulte útil.

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
sin imagen de perfil

Nombre de array

Publicado por Pepe Mtz. Ruano (6 intervenciones) el 28/01/2024 09:35:45
Kabuto, muchísimas gracias. No podía recibir una explicación más completa de mi cuestión. Y en efecto, si que he entendido el código porque estoy matriculado en programación de un ciclo superior de DAW y ahí ando... A lo dicho, muy buena y pedagógica labor. Mil gracias de nuevo!
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