Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

205
Vistas
Java: variable de muchos objetos (estática)

Soy nuevo en la codificación orientada a objetos y tengo el siguiente problema.

(tenga en cuenta que esta solución es parte de mi problema)

Necesito una variable a la que puedan hacer referencia muchos objetos, pero mantengo información "privada" para cada objeto. Para ser más específico, creé una clase llamada Worker y quiero que cada objeto de esa clase tenga una ID única de tipo int . Entonces, el primer objeto tiene ID=1 , el segundo ID=2 , etc. Tenga en cuenta que no quiero solo un número entero aleatorio, mientras que necesito comenzar a contar desde 0 e incrementar...

Declaración e inicialización de la variable en la clase.

 static private int workId = 0;

e intenté implementar el incremento agregando esta línea de código en el cuerpo del constructor

 workId++;

Hago una instancia de algunos objetos, los agrego a una ArrayList y usando un bucle for imprimo las variables de cada objeto.

 System.out.println("Worker ID: "+workerList.get(i).getWorkerId());

y getWorkerId() (método de clase) consta de

 public int getWorkerId () { return this.workId; }

El problema es que mi programa no imprimirá cada workID de trabajo único (porque no lo hay), sino el último valor de la variable estática (que resulta ser la cantidad de objetos).

¿Puedes describir una solución a mi problema?

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Comentario convertido en respuesta:

Estás en el camino correcto.

Actualmente, su miembro estático aumentará con cada trabajador que cree. Esto significa que no contendrá la identificación de un trabajador (este no puede ser el caso, ya que una variable estática pertenece a la clase en lugar de instancias individuales), sino que contiene la cantidad total de trabajadores que creó hasta el momento.

Arreglar

  • Cambie el nombre de su miembro estático a algo como numWorkers para que refleje lo que hace
  • Introduzca otro miembro (no estático), id (o workerId de trabajador si lo prefiere)
  • Cambie workId++ a id = ++numWorkers

¿Por qué?

Ahora, cada trabajador tiene su propia id . Lo asigna mirando el número actual de trabajadores creados ( numWorkers ), incrementa ese valor en uno y luego lo asigna a id . De esta manera, la identificación de su primer trabajador será 1 , la segunda será 2 y así sucesivamente. numWorkers siempre contiene la cantidad de trabajadores creados, que es al mismo tiempo la última identificación que entregó.


Juntar

Dado que esta pregunta obtuvo bastantes votos a favor (= interés), resumiré lo anterior en un plano:

 public class Worker { private static int numWorkers; // Number of Worker objects created private int id; // Individual ID of a worker public Worker() { id = ++numWorkers; // Will be 1 for the first, 2 for the second, ... } public int getID() { return id; } public static int getNumWorkers() { return numWorkers; } }

Tenga en cuenta que en Java, no necesita inicializar el tipo primitivo int en 0 , ya que ese es el valor predeterminado para un int . Por supuesto, está bien hacerlo de todos modos; nunca está de más ser explícito.

about 4 years ago · Santiago Trujillo Denunciar

0

Estás bastante cerca del éxito en realidad.

Los miembros estáticos, como ya sabrá, pertenecen a la clase en sí, no a cada instancia. Pero como dijiste, cada trabajador debe tener su propia ID única, por lo que workId no debe ser estático.

Sin embargo, todavía necesitamos una variable estática para realizar un seguimiento de qué ID se debe dar al próximo trabajador que creamos. Declaremos uno:

 static private int nextWorkId = 0;

Luego, en su constructor, asigna nextWorkId a workId , luego incrementa nextWorkId :

 workId = nextWorkId; nextWorkId++;

También puedes escribirlo así:

 workId = nextWorkId++;
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda