Hola, soy nuevo en Java y tengo una tarea en la que durante días no pude averiguar cómo tener un atributo único para cada objeto que se genera aleatoriamente. En mi reserva de clase, quiero que kratisid sea único y generado aleatoriamente para cada object pero si hago eso en el constructor en el método main(), necesito pasar un valor aritmético y no el generado automáticamente. Aquí está el código:
import java.utils.*; import static org.apache.commons.lang3.RandomStringUtils.*; public class reservation { String onoma; int afixi; int mdiam; int atoma; Domatio domat;//domat prosorinos deiktis sto object Domatio tha balo d meta Domatio d; Random rand = new Random();//this.kratisid=kratisid; kai stin main bazo random //random kratisi id static int kratisid = rand.nextInt(500) + 100;//It produces a random kratisid between 100 and 500 String onoma = RandomStringUtils.randomAlphabetic(10); //it produces a random alphabetic string for the onoma variable public reservation(String onoma, int kratisid, int afixi, int mdiam, int atoma, Domatio d)//boolean s) { //info for customer of a hotel reservation,d is reference to Domatio objects an another class d = null; this.onoma = onoma; //System.out.println("Enter your name please"); //Scanner scanner1= new Scanner(System.in); //onoma=scanner1.nextLine() this.afixi = afixi; //System.out.println("Enter your day of arrival please ,it must be from 1 to 30 max"); //Scanner scanner2=new Scanner(System.in); // afixi=scanner2.nextInt(); // if(afixi<1 && afixi>30){ // afixi=0; // System.out.println("Please re-enter your arrival within the month boundaries"); //} this.mdiam = mdiam; //System.out.println("Please enter the number of days you will be staying"); // Scanner scanner3=new Scanner(System.in); // mdiam=scanner3.nextInt(); this.atoma = atoma;// }Ahora, en el método principal, cuando creo un objeto, por ejemplo, necesito pasar el kratisid estático como argumento, pero ¿cómo hago para que el objeto tenga el kratisid aleatorio estático sin necesidad de pasarlo en la creación del objeto en main? En caso de que no lo haya dicho, trato de crear un kratisid aleatorio único para cada objeto y un onoma que también es aleatorio, pero si el usuario lo desea, puede ingresar el suyo.
Si desea crear objetos con diferentes campos inicializados aleatoriamente, entonces debería considerar algo como esto:
public class Reservation { private static final Random r = new Random(0); private int kratisid = r.nextInt(500) + 100; // ... }Tenga en cuenta que:
rComo tal, considere esta solución:
public class Reservation { private static final Random r = new Random(0); private static Semaphore semaphore = new Semaphore(1); private static int getRandomInt() { final int res; semaphore.acquireUninterruptibly(); res = r.nextInt(500) + 100; semaphore.release(); return res; } private int kratisid = getRandomInt(); // ... }