Java - renombrar nobmre de objeto con loop

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

renombrar nobmre de objeto con loop

Publicado por jose (73 intervenciones) el 29/10/2021 21:38:04
Hola,

Estoy haciendo un pequeño programa con la siguiente clase

1
2
3
4
public class Clientes {
    String nif;
    String nombre;
}

Se supone que cada vez que queremos crear un objeto hemos de escribir

1
2
3
Clientes cliente = new Clientes();
cliente.nif = "bla";
cliente.nombre = "bla";

El tema es que si hago un programa donde automatizó todo y lo pongo en un array con muchas líneas, pero que también tengo que crear los objetos.

Como hago para poder renombrar los objetos algo así como cliente1, cliente2

Lo he intentado con un for y un string cliente = cliente+i pero no he visto la forma.

Buscando en internet no he encontrado nada que me ayude.

Alguien sabe como hacerlo?
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 jose
Val: 64
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

renombrar nobmre de objeto con loop

Publicado por jose (73 intervenciones) el 30/10/2021 11:14:45
Creo que es esto lo que busco

1
2
3
4
5
6
void test(String[][] avio) {
		Client[] client = new Client[avio.length];
		for (int i=0;i<avio.length;i++) {
			client[i] = new Client();
		}
	}
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 jose
Val: 64
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

renombrar nobmre de objeto con loop

Publicado por jose (73 intervenciones) el 30/10/2021 14:23:10
Hola,

Por crearlo bien. Pero no consigo hacer me devuelva el último objeto creado, ej.:

int i = 1;
client[i] = new Client(); = cliente1

Cuando vuelva a crear el siguiente objeto debería ser

client[i] = new Client(); = cliente2

No tengo ni idea y en internet no encuentro algo que me ayude. He hecho un rollback para dejarlo todo con arrays.
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

renombrar nobmre de objeto con loop

Publicado por Santiago (25 intervenciones) el 31/10/2021 09:39:30
Hola, José.

No entiendo bien el problema. ¿Puedes decirnos qué es lo que tienes que hacer exactamente?

Aquí tienes una matriz bidemensional (avio), pero no sé qué tiene que ver con los Clientes.
Tampoco sé qué se pretende con el método test. Entiendo que es de prueba, pero no devuelve nada.
1
2
3
4
5
6
7
8
9
10
11
void test(String[][] avio) {
 
		Client[] client = new Client[avio.length];
 
		for (int i=0;i<avio.length;i++) {
 
			client[i] = new Client();
 
		}
 
	}

¿Puedes enviarme un ejemplo de lo que quieres hacer con datos falsos?

Algo así, pero indicando qué esperas obtener:

1
2
3
4
5
6
7
avio[0][0]="Pepe";
avio[0][1]="Lopez";
avio[1][0]="Carlos";
avio[1][1]="Perez";
 
test(avio);
...
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

renombrar nobmre de objeto con loop

Publicado por Kabuto (1381 intervenciones) el 31/10/2021 11:00:04
Creo entender que lo que se intenta es automatizar alguna forma para crear/cambiar nombres(identificadores) de variables/objetos durante la ejecución del programa.
Lo cuál es imposible, pero es que además, tampoco veo la necesidad.

Si vamos a crear por ejemplo 50 clientes, no necesitamos disponer de los identificadores cliente01, cliente02, cliente03, cliente04.....hasta cliente50.

Para eso usamos los arrays
1
Cliente[] clientes = new Cliente[50];

Durante la creación de clientes, no hay ningún problema en usar el mismo objeto cliente como objeto "de transición" para crear los 50

1
2
3
4
5
6
7
Cliente[] clientes = new Cliente[50];
for (int i = 0; i < 50; i++) {
    Cliente temporal = new Cliente(); //Identificador de transición durante la creación
    temporal.nif = "bla";
    temporal.nombre = "bla";
    clientes[i] = temporal; //Asignamos al identificador definitivo, que es una posición i en el array
}

Incluso podemos evitar usar un objeto "de transición" y trabjar directamente sobre la posicion del array
1
2
3
4
5
6
Cliente[] clientes = new Cliente[50];
for (int i = 0; i < 50; i++) {
    clientes[i] = new Cliente(); //Creamos cliente directamente en el array y trabajamos en el
    clientes[i].nif = "bla";
    clientes[i].nombre = "bla";
}

Aunque para mi gusto, me resulta más elegante dotar a la clase de un constructor que reciba los valores de los atributos
1
2
3
4
5
6
Cliente[] clientes = new Cliente[50];
for (int i = 0; i < 50; i++) {
    String nif = "bla";
    String nombre = "bla";
    clientes[i] = new Cliente(nif, nombre); //Constructor que recibe valores
}


Todas las formas son igual de efectivas, ya es elegir a gusto de cada uno.


En cualquier caso, no hay forma posible de crear distintos identificadores en tiempo de ejecución.
Si queremos tener 50 clientes, cada uno con un identificador propio y que no estén aglutinados en un array, hay que escribirlos a mano, uno a uno, en el código antes de lanzar la ejecución del programa.
Pero no vamos a querer nunca tal cosa, porque todo el trabajo se multiplicará literalmente por 50.
Crearlos nos supondrá 50 líneas.
Asignarles valores otras 50 (por cada atributo)
Consultar sus valores otras 50 (por cada atributo)..
Vamos una locura.

De ahí que lo normal sea usar arrays combinados con bucles. Así da igual si son 50 objetos, o 50 millones... todo lo vamos a resolver con unas poquitas líneas de código.


Me ha parecido que tu consulta tenía que ver con esto.
Si no fuera así, reformúlala a ver si conseguimos ayudarte.

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

renombrar nobmre de objeto con loop

Publicado por jose (73 intervenciones) el 31/10/2021 21:59:33
Hola Santiago y Kabuto,

Gracias por vuestras respuestas.

Justamente buscaba eso. Si era posible crear objetos automáticamente cuando se necesite.

El método que he creado es el 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
boolean afegirClient(String[][] Clients, String nif, String nombre, Client clienteObjeto) {
		//Creando objeto de clase Utils
		Utils utils = new Utils();
		int i = 0;
		boolean anadido = false;
 
		//Posiciones son las filas que tiene el array avio.
		for (i = 0; i < Clients.length-1; i++) {
 
			//Controlar la posición del siguiente cliente
			//Si el cliente está nulo.
			if (Clients[i][0]==null) {
				/*Creamos el objeto numero i ej.cliente1
				y añadimos los valores de nif y nombre */
				clienteObjeto.nif = nif;
				clienteObjeto.nom = nombre;
				Clients[i][0] = clienteObjeto.nif;
				Clients[i][1] = clienteObjeto.nom;
 
				break;
 
			}
			/*else {
				//Comprobando que el avión está lleno
				anadido = comprobarArrayClienteLleno(Clients);
			}*/
 
		}
 
 
 
		try {
			//Comprobamos que los valores se hayan añadido correctamente al array y a la clase Client
			if ((Clients[i][0].equals(nif)) && (Clients[i][1].equals(nombre))
					&& clienteObjeto.nif.equals(nif) && clienteObjeto.nom.equals(nombre)) {
				anadido = true;
			} else {
				anadido = false;
				utils.mostrarTex("No ha podido ser rellenado.", "println");
			}
			//Excepcion para controlar la salida de array
		} catch (Exception e) {
			utils.mostrarTex("Recuerdo de vuelo está lleno", "println");
			anadido = false;
 
		}
 
		return anadido;
 
	} //Fin de afegirClient

Lo que pretendía era en vez de crear un array fijo. Era crear objetos según los necesite, algo como:

1
2
3
4
5
6
7
8
9
Cliente[] Clients= new Cliente[50];
if (Clients[i][0]==null) {
   for (int i = 0; i < 50; i++) {
      Clients[i] = new Cliente();
      Clients[i].nif = nif;
      Clients[i].nom = nom;
 
  }
}

Haré la modificación para practicar.

Como siempre muchas gracias por la ayuda.
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
Val: 973
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

renombrar nobmre de objeto con loop

Publicado por Agustin (170 intervenciones) el 31/10/2021 23:18:18
Yo no entiendo por qué los cursos / universidades / profesores le queman tanto la cabeza a la gente con arrays anidados.

En java (debido a que es un lenguaje arcaico y terriblemente limitado) no existen los arrays N-dimensionales, por lo tanto se usan arrays anidados para simularlos.

Dicho esto, en 25 años de programar y 15 de hacerlo profesionalmente, JAMAS tuve que usar arrays N-dimensionales para modelar datos de negocio. Ni una sola vez.

Atribuyo esta discrepancia entre la enseñanza académica y el uso práctico en el mundo real, justamente al hecho de que en la mayoría de los casos los profesores no son gente que realmente se dedique a escribir software 8 o 10 horas al día para ganarse la vida.

Tener datos sueltos metidos en arrays anidados que no tienen ninguna cohesión a nivel de type system es el equivalente numérico al string typing. La cohesión entre los datos relacionados se da en tiempo de ejecución por el hecho anecdótico de compartir un mismo índice dentro de diferentes arrays, y no en tiempo de diseño por pertenecer a una estructura formalizada que efectivamente contenga y agrupe los datos relacionados en una unidad indivisible

Sería mucho muy preferible entender cómo modelar este problema en objetos.

Si me explicás qué problema estás tratando de resolver realmente te puedo dar una sugerencia para modelar el problema de una forma muchísimo más práctica e intuitiva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-2
Comentar
Imágen de perfil de jose
Val: 64
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

renombrar nobmre de objeto con loop

Publicado por jose (73 intervenciones) el 01/11/2021 12:44:38
Hola Agustín,

Lo que dices es cierto, en la enseñanza te enseñan lo básico para entender. Realmente lo que me piden es tan simple como esto:

1
2
3
4
5
6
7
8
9
10
11
if (Clients[i][0]==null) {
				/*Creamos el objeto numero i ej.cliente1
				y añadimos los valores de nif y nombre */
				clienteObjeto.nif = nif;
				clienteObjeto.nom = nombre;
				Clients[i][0] = clienteObjeto.nif;
				Clients[i][1] = clienteObjeto.nom;
 
				break;
 
			}

La clase sólo tiene:

1
2
3
4
public class Client {
    String nif;
    String nom;
}

Me piden que cree un array llamado Clients y meta los datos pasando por la clase Client. Creo que para crear un array no hace falta crear objetos. Por lo que busco, para mí, la manera de eliminar el array y crear objetos según necesite. Y no crear un array con 20 líneas que no haya que utilizar. Creo que el programa necesitaría de menos recursos.

Lo normal sería guardarlo en un archivo o una BBDD. Pero bueno como digo es un curso de programación básica. Con el tiempo que llevo tendría que ser guru de java , jajajaj. Pero le he tenido que ir dejando, y por fin estoy acabando un esta parte.

El tema es que todo este curso se basa en trabajar con el IDE o con un archivo .java, en vez de ser más prácticos y enseñar a programar con gráficos, o ver que puede valer para algo más.

Gracias Agustí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
sin imagen de perfil
Val: 973
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

renombrar nobmre de objeto con loop

Publicado por Agustin (170 intervenciones) el 01/11/2021 15:18:44
Ignorándo los comentarios agresivos de gente cuya vida debe ser muy miserable, como para dedicarse a insultar a otros en internet (lo cuál no me sorprende si se trata de alguien cuyo oficio diario involucra el uso de java), la pregunta concreta es qué representa el primer nivel (o "dimensión" (que no es tal como ya expliqué) del array?

Por ejemplo, representa "vuelos" o "aviones"? En ese caso en lugar de un array anidado (que no es indicativo de esta representación, y por lo tanto queda implícita), sería mejor algo así:

1
2
3
4
class Avion
{
    public List<Cliente> Clientes { get; } = new();
}

Donde expresamos la relación de manera explícita: un Avión contiene una lista de Clientes (o pasajeros). Luego si quisieramos modelar múltiples aviones simplemente hacemos un List<Avion>

Acá es donde te digo que expresar las cosas en objetos es mucho mejor que expresarlas en arrays cuya relación queda implícita en el código y hay que estar "adivinando" qué es cada cosa y como juega con las otras cosas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-2
Comentar

renombrar nobmre de objeto con loop

Publicado por Tom (1831 intervenciones) el 01/11/2021 13:05:35
Pero @Agustín ¿ Tú sabes lo que es un array, bocas ?
Los arrays son importantes en la enseñanza, de cualquier lenguaje, porque son un modelo de acceso a memoria. Son zonas contiguas de memoria que el compilador sabe cómo indexar de forma simple y directa.
Así que un array en tu super-duper lenguaje, tenga las dimensiones que tenga, será una zona de datos homogéneos y contiguos en memoria (o en la memoria virtual que tengas asignada) o no será un array, será otra cosa.

Un array, en java como en otros tantos lenguajes, puede tener las dimensiones que te apetezca y que tu sentido común te recomiende.
Por cierto, imbécil, en java un array es un objeto.
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
Val: 973
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

renombrar nobmre de objeto con loop

Publicado por Agustin (170 intervenciones) el 01/11/2021 14:18:26
No hace falta insultar para demostrar tu falsa "superioridad", cuando en realidad lo único que demostrás es tu ignorancia, y tu limitado marco de referencia.

En primer lugar, no necesito que nadie (y mucho menos que menos alguien como vos) me "explique" lo que es un array. Mi punto no es sobre como se disponen los datos en memoria (ya que ese es un detalle de bajo nivel que a la lógica de negocio NO le interesa). Mi punto es sobre la cohesión a nivel de Type System entre los diferentes datos, y como un array anidado no proporciona, o mejor dicho no expresa, la relación que existe entre los diferentes datos.

Otro problema con los arrays anidados es que no hay nada que fuerce la consistencia entre los distintos "arrays hijos", uno podría tener 5 elementos y el siguiente 10000. Esto en general no es una forma muy intuitiva de modelar datos de negocio, de nuevo, irrespectivamente de detalles de implementación de bajo nivel.

Te recomiendo que en lugar de insultar y tratar de imbêcil a los que claramente sabemos mucho más que vos, tengas un mínimo de humildad para reconocer tu enorme ignorancia y tu marco de referencia terriblemente limitado. De paso también te recomiendo que saques la cabeza de adentro del tacho y conozcas un par de lenguajes modernos. En una de esas, quien te dice, te das cuenta que java es un asco.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-2
Comentar

renombrar nobmre de objeto con loop

Publicado por Tom (1831 intervenciones) el 01/11/2021 15:10:33
Es que ni lees y luego no te enteras, hablas por hablar diciendo chorradas, de ahí mi opinión de que muy listo no eres.
Repito lo que he dicho. Un array es una zona contigua de memoria, reservada para contener una serie homogénea de elementos.
¿ Qué es eso de arrays anidados ? Un array es una tira, no hay arrays hijos.
Entonces ... ¿ a qué viene lo de "la cohesion de TypeSystem" (a no ser que sea algo que acabas de oir y te ha gustado) ? ¿ Y que chorrada es esa de "simular dimensiones" que hace java ?
Insisto, para que lo pilles (si quieres): un array de 7 "filas" y 4 "columnas" (así se lo explicaría a mis sobrinillos, visualizarlo ayuda y en realidad se entendería mejor llamándolo "tabla") son 28 posiciones en memoria, seguiditas, una detrás de otra. El tamaño final depende de qué contenga el array (todos los elementos son del mismo tipo).
Y el acceso a cada elemento individual se hace muy eficientemente, es casi inmediato (las cpu suelen tener instrucciones muy listas que ayudan a esto) como seguro que ya sabes, no es más que hacer un par de operaciones aritméticas.
Por este tipo de cosas los arrays son como son y sirven para lo que sirven.

Ahora, sin tu absurda palabrería, lo que tú querías decir (y aquí soy indulgente al pensar que en el fondo querías decir algo) es que no te parece buena idea por ejemplo separar los atributos de los objetos en arrays.

O sea que esto no te mola:

1
2
3
4
5
6
7
8
9
10
11
class PinStore {
   String names[128];
   int pins[128];
 
   int getPin(String name) {
      for(int i = 0; i < names.length; i++) {
         if(names[i].equals(name) return pins[i];
      }
      return -1;
   }
}

Bueno, pues elegante no es, pero funcionará.
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
Val: 973
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

renombrar nobmre de objeto con loop

Publicado por Agustin (170 intervenciones) el 01/11/2021 15:46:33
A ver, tratemos de tener un intercambio civilizado sin insultos de por medio, y ver si podemos entender la naturaleza de la enorme diferencia entre tu marco de referencia y el mio:

Seguís hablando de cuestiones de bajo nivel, y yo estoy parado en otro lado. Yo estoy parado en el negocio, y por lo tanto manejo conceptos de negocio. Cómo se almacenan los datos en memoria me resulta completamente irrelevante ya que es un detalle de bajo nivel, que a menos que exista una verdadera razón (por ejemplo de performance) para considerar, en la práctica es un concern secundario a otros aspectos mucho más importantes para el negocio, como por ejemplo la mantenibilidad del código.

Tal vez la naturaleza del código que vos escribís sea de más bajo nivel, y requiera prestar atención a tales detalles de bajo nivel, pero honestamente lo dudo ya que en la enorme mayoría de los casos los sistemas son I/O bound más que CPU bound, a menos que trabajes en CERN o algo así.

No es mi caso. Yo priorizo SIEMPRE la legibilidad (por eso jamás usaría java) y optimizo a más bajo nivel SOLO cuando la situación lo amerita (por ejemplo luego de haber profileado y encontrado un cuello de botella cpu-bound específico en un hot path puntual).

Dicho esto, efectivamente java NO SOPORTA arrays multi-dimensionales, lo que si soporta son "arrays de arrays" o como dije, arrays anidados.

Acá Te comparto un link que demuestra la diferencia entre arrays multi-dimensionales, y arrays anidados o "jagged arrays" en un lenguaje que SI lo soporta, para que veas la diferencia y de paso amplíes tu marco de referencia viendo algo que en java no existe pero en lenguajes modernos si.

Lo que comentás del ejemplo de tabla, efectivamente sería mucho mejor modelado con un array de 2 dimensiones, cosa que no es posible en java. La ventaja principal en este caso es que un array de arrays NO EXPRESA el hecho de que la cantidad de "columnas" (segunda dimensión) para cada fila es invariable.

En un array de arrays yo podría tener esto:

arr[0] = { 1, 2, 3 }
arr[1} = { 1, 2, 3, 4, 5, 6 }

Y como verás, conceptualmente esa estructura de datos ya no representa tan adecuadamente una "tabla" o "grilla" (que debería ser cuadrada o rectangular, conceptualmente, donde cada fila tiene una IGUAL cantidad de columnas).

Respecto del mejor uso del Type System para representar conceptos, la idea es que con un type system más rico (no el de java, como vemos) se pueden modelar los conceptos de forma que Los estados ilegales sean imposibles de representar.

En este caso puntual de los aviones y los pasajeros, vemos, como dije, que representar este concepto con jagged arrays es la PEOR opción de todas. Si java soportara arrays N-dimensionales, podríamos tener una mejor representación, pero incluso así, sería preferible siempre usar una clase Avion con una lista de pasajeros como describí arriba.

Respecto de tu comentario: Bueno, "pues elegante no es, pero funcionará":

Creo que esta es la filosofía general de java como lenguaje, y como el lenguaje condiciona tu pensamiento, la gente cuyo marco de referencia se basa solamente en éste, tiende a generar código como el que escribiste arriba, que no solamente es un ejemplo de lo que indiqué antes sobre la falta de cohesión de los datos, sino que además es un ejemplo de una mala práctica relacionada al uso de valores mágicos para representar estados ilegales. En tu caso usaste -1 como indicativo de que no existe el "pin" en la lista, cuando en realidad en un lenguaje más rico podrías haber usado algo así:

1
2
3
4
5
6
class PinStore
{
    List<(string Name, int Value)> Pins = new();
 
    int? GetPin(string name) => Pins.FirstOrDefault(x => x.Name == name)?.Value;
}

Si te interesa te puedo profundizar un poco más sobre la gran cantidad de language features que no existen en java que utilicé en estas breves líneas, de nuevo, con el fin de que puedas ampliar un poco tu marco de referencia.

- Tuplas.
- LINQ
- Nullable Value Types
- Null Propagation
- Expression bodied members
- Targed-typed new
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-2
Comentar

renombrar nobmre de objeto con loop

Publicado por Tom (1831 intervenciones) el 01/11/2021 17:46:27
¡ Y vuelta la burra al trigo ! estamos hablando de arrays. Tú, quien preguntó ... y quienes le han contestado. Déjate de historias. Y como los arrays son de bajo nivel, funcionan prácticamente igual en cualquier lenguaje, que es a lo que vamos. Tu manía de hablar de lo que no sabes solamente para trolear ... es cansina, de verdad.

Y no insistas, los arrays, no solo en java, soportan las dimensiones que quieras, porque es el compilador o la vm quien resuelve el indexado.
Me estás enlazando a una serie de comentarios en el que hay una frase:
" Actually Java doesn't have multi-dimensional array in mathematical sense " (resaltado es mío) Chico, de ahí a decir que no puedes hacer esto:

int[][] values = new int[4][7];

va un mundo.
Lo que sí es correcto es que en la VM de Oracle una tabla, o array multidimensional es un array de arrays ... eso no es simular nada, es como es; De hecho es que se llama así en la especificación ("array of arrays");

Por cierto, esto te da la flexibilidad de que el numero de elementos en la ultima dimensión pueda variar (yo eso lo considero una ventaja) no como en c o algún otro lenguaje ;) que lo haga como dicen en el link.

Y sí, majete, muy bonito tu código, también puedes usar Collections, Streams y lambdas en java, no aportas mucho a un tema que acabas de sacar tú, además (por cierto, estas cosas no solo son java, java, es que el ide incluso te propone que las uses).

Mi código era para ilustrar el asunto, lo sabes y lo sabemos, polemizas como una mula que no atiende a razones.

Si java tiene una filosofía ... yo creo que es "hazlo como quieras" lo cual a mí, por ejemplo, me convence y me ayuda y después de todo el lenguaje está a mi servicio y no al revé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
sin imagen de perfil
Val: 973
Bronce
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

renombrar nobmre de objeto con loop

Publicado por Agustin (170 intervenciones) el 01/11/2021 18:08:52
Si java tiene una filosofía ... yo creo que es "hazlo como quieras" lo cual a mí, por ejemplo, me convence y me ayuda y después de todo el lenguaje está a mi servicio y no al revés.

Es exactamente lo contrario. Tener menos language features significa que tenes menos formas de expresar los conceptos y no más.

Ahi es donde te digo que tu marco de referencia es terriblemente limitado.

Seguís hablando de conceptos de bajo nivel. A mi no me interesa lo que hace la VM por atras con el código. Me interesa que el código exprese la intención y la idea que se trata de expresar en la mayor medida posible, y eso con java simplemente no es posible.

de ahí a decir que no puedes hacer esto

Seguís enfrascado en tu marco de referencia. Lo que claramente no podes hacer en java es esto:

1
var myArray = new string[5, 20];

Que es verdaderamente un array multidimensional, y no un array anidado.

Tu manía de hablar de lo que no sabes

Hasta ahora te demostré que mi marco de referencia es MUCHISIMO (por lejos) más amplio que el tuyo. Te agradecería que dejes de emitir comentarios degradantes diciendo que "no sé" cuando te estoy demostrando con creces que te faltan décadas para llegar a mi nivel de conocimiento.

Por más que llores y patalees, NO, java NO soporta arrays multi-dimensionales a nivel de lenguaje. Tenes un workaround horrendo para emularlo, tal y como es casi todo en java, en lugar de soportar constructos de manera nativa en el lenguaje te obliga a vomitar workarounds todo el tiempo.

No, los "streams" y tal cosa no son ni la mitad de expresivos y ergonómicos de lo que es LINQ. Y java NO soporta nullable value types, null propagation, expression bodied members, y mucho menos que menos tuplas. El hecho de que "te las tengas que arreglar" para emular todos estos conceptos de una forma muchísimo menos ergonómica, justamente demuestra mi punto: java como lenguaje es inferior a cualquier lenguaje estático moderno, y como dije arriba condiciona tu pensamiento de una manera super limitante, al punto de que "te da igual" hacer las cosas en 2 lineas de código que tener que escribir 200, y perder un montón de type safety y varias otras ventajas en el camino.

Esta incapacidad de apreciar los lenguajes que están por encima de tu marco de referencia se conoce como la paradoja Blub.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
-3
Comentar
Imágen de perfil de jose
Val: 64
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

renombrar nobmre de objeto con loop

Publicado por jose (73 intervenciones) el 01/11/2021 15:50:43
Hola de nuevo,

No sé me pinta el error de NullPointerException cuando el valor es null, cuando
1
clienteObjeto[i].nif!=null o clienteObjeto[i].nif==null

Por otra parte tampoco me funciona como espero. Me explico:
Tengo la siguiente clase creada
1
2
3
4
public class Client {
    String nif;
    String nom;
}

En la clase donde poniendo el código que llama a la clase Client, para crear el objeto al inicio del programa creo el objeto de esta forma:
1
Client[] clienteObjeto = new Client[1];

Aquí creo con un array otro objeto la intención es sea algo como
Client clienteObjeto1 = new Client();
clienteObjeto1.nif = nif;
clienteObjeto1.nom = nombre;

1
2
3
4
5
6
7
for (i = 0; i < clienteObjeto.length; i++) {
			clienteObjeto[i] = new Client(); //CREO UN OBJETO NUEVO
			clienteObjeto[i].nif = nif;
			clienteObjeto[i].nom = nombre;
			break;
 
			}

Screenshot-from-2021-11-01-15-44-55

Como veis añadir lo añade en clienteObjeto.

Vuelvo añadir otro cliente
Entiendo que volverá a crear otro objeto en este caso
Client clienteObjeto2 = new Client();
clienteObjeto2.nif = nif;
clienteObjeto2.nom = nombre;

y si quiero mostrar todos los clientes con la siguiente función

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//public void MostrarClients(String[][] Clients) {
	public void MostrarClients(Client[] clienteObjeto) {
		//Creando objeto de clase Utils
		Utils utils = new Utils();
 
		utils.mostrarTitol("Lista de pasajeros");
		for (int i =0;i < clienteObjeto.length; i++) {
			if (clienteObjeto[i].nif!=null) {
 
				utils.mostrarTex("Cliente núm " + i + " -  Nif " + clienteObjeto[i].nif + " - Nombre " + clienteObjeto[i].nom ,"println");
 
			}
		}
 
	} //Fin MostrarClients

Resulta que sólo pinta el último cliente creado, en vez de la lista completa.
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

renombrar nobmre de objeto con loop

Publicado por Tom (1831 intervenciones) el 01/11/2021 17:50:36
@Jose, pon atención al flujo de tu programa, me parece que vas precipitado.
Respecto a lo primero que preguntas:

clienteObjeto[i].nif!=null o clienteObjeto[i].nif==null

obtienes una excepción porque lo que es null es cliente.Objeto[i], lo que significa que es imposible obtener .nif.
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

renombrar nobmre de objeto con loop

Publicado por Kabuto (1381 intervenciones) el 01/11/2021 18:29:23
Pero esto:
1
Client[] clienteObjeto = new Client[1];

Es un array con un solo elemento.
Por muchas veces que repitas el proceso de agregar clientes, no te va a hacer ninguna lista, porque ahí solo cabe un cliente. Por eso luego solo te imprime el último que has creado, porque cada vez que añades un cliente, se machaca el cliente anterior.

Aún sigo sin tener claro el por qué de tus dudas.
Antes me ha parecido leer/entender que no te gustaba el tener que usar un array de cierta cantidad de elementos, cuando luego a lo mejor solo vas a añadir muchos menos clientes de los espacios que ha reservado el array.
1
2
3
[...] crear objetos según necesite.
Y no crear un array con 20 líneas que no haya que utilizar.
Creo que el programa necesitaría de menos recursos.

Los arrays "primitivos" son así, estáticos, hay que darles un tamaño fijo al principio y no puede variar.

Sin embargo, puedes usar la clase ArrayList. Es similar a un array, pero son dinámicos, no hay que darles ningún tamaño fijo. Su longitud irá aumentando al añadirle elementos, o menguando si los eliminamos.

Ejemplo:
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
import java.util.Scanner;
import java.util.ArrayList;
 
public class Main
{
    public static void main(String[] args) {
        Scanner teclado = new Scanner(System.in);
        ArrayList<Cliente> clientes = new ArrayList<Cliente>();
        String continuar = "s";
 
        while (continuar.equals("s")) {
            System.out.println("Crear cliente.");
            Cliente nuevo = new Cliente();
            System.out.print("NIF: ");
            nuevo.nif = teclado.nextLine();
            System.out.print("Nombre: ");
            nuevo.nom = teclado.nextLine();
            //Añadimos al ArrayList
            clientes.add(nuevo);
            System.out.print("\nCliente añadido. ¿Crear otro?(s/n): ");
            continuar = teclado.nextLine().toLowerCase();
        }
 
        System.out.println("\nCantidad de clientes registrados: " + clientes.size());
        System.out.println("Listado:")
        for (int i = 0; i < clientes.size(); i++) {
            System.out.print("NIF: " + clientes.get(i).nif);
            System.out.println(" -- Nombre: " + clientes.get(i).nom);
        }
 
    }
}


Ahora bien, puede que para este ejercicio en concreto te hayan pedido usar arrays primitivos, simplemente para que te familiarices con ellos y no porque sean la estructura ideal para este tipo de tareas (que no lo son...)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de jose
Val: 64
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

renombrar nobmre de objeto con loop

Publicado por jose (73 intervenciones) el 01/11/2021 20:45:23
Hola Kabuto,

Así es. Me han pedido un array primitivo.

Simplemente quería saber si podía crear objetos automáticamente y así crear tantos objetos como necesite.

Independientemente de la discusión he leído todos los comentarios y me ha servido para entender.

Muchas gracias a todos,
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
Val: 48
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

renombrar nobmre de objeto con loop

Publicado por José (16 intervenciones) el 01/11/2021 21:43:23
A ver si me equivoco ... ¿ lo que querías es rellenar un array con objetos para pruebas ?
Puedes crear un cliente y luego con un for rellenar el array poniendo el mismo objeto en todas las posiciones.
O si quieres hacer que los clientes tengan algo distinto puedes usar el mismo índice del for para usarlo como parámetro del constructor de Cliente.
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

renombrar nobmre de objeto con loop

Publicado por Santiago (25 intervenciones) el 02/11/2021 11:06:26
Hola, José:

Adjunto un código para ver si es lo que quieres hacer:

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
public class Nif {
 
	// Constante con el máximo número de clientes
	private static int MAX_CLIENTES = 3;
 
	public static void main(String[] args) {
 
		// Creamos una matriz de objetos "Clientes" con un máximo de clientes
		Clientes[] clientes = new Clientes[MAX_CLIENTES];
 
		// Cargamos los clientes
		clientes[0] = new Clientes();
		clientes[0].nif="1R";
		clientes[0].nombre="Romualdo";
 
		clientes[1] = new Clientes();
		clientes[1].nif="2W";
		clientes[1].nombre="Ana";
 
		clientes[2] = new Clientes();
		clientes[2].nif="3A";
		clientes[2].nombre="Jesús";
 
		MostrarClients(clientes);
 
 
	}
 
	public static void MostrarClients(Clientes[] clienteObjeto) {
 
		//Creando objeto de clase Utils
		//Utils utils = new Utils();
 
		//utils.mostrarTitol("Lista de pasajeros");
		System.out.println("Lista de pasajeros");
 
 
		for (int i =0;i < clienteObjeto.length; i++) {
 
			if (clienteObjeto[i].nif!=null) {
				System.out.println("Cliente núm " + i + " -  Nif " + clienteObjeto[i].nif + " - Nombre " + clienteObjeto[i].nombre);
				//utils.mostrarTex("Cliente núm " + i + " -  Nif " + clienteObjeto[i].nif + " - Nombre " + clienteObjeto[i].nom ,"println");
			}
 
		}
 
	} //Fin MostrarClients
 
 
}
La clase Clientes es:

1
2
3
4
5
6
7
public class Clientes {
 
    String nif;
 
    String 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 jose
Val: 64
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

renombrar nobmre de objeto con loop

Publicado por jose (73 intervenciones) el 02/11/2021 11:32:28
Hola Santiago,

Eso mismo fue lo que hice y me ha funcionado. También lo hice con ArrayLIst por probar e incluso me parece más lógico, sencillo y práctico dado que puedes eliminar fácilmente.

Muchas gracias por la apartació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