Java 关于生成唯一随机数 public String generateCostomerid(字符串id,整数位)//客户类 随机生成器=新随机(); 字符串索引=”; 对于(inti=1;i

Java 关于生成唯一随机数 public String generateCostomerid(字符串id,整数位)//客户类 随机生成器=新随机(); 字符串索引=”; 对于(inti=1;i,java,Java,place while(set.contains(number)){ 编号=customer.generateCustomerID(“AB”,1); } 之前 set.add(编号);customer.setCustomerID(编号);考虑此解决方案 public String generateCustomerID(String id, int digit)//Customer Class randomGenerator = new Random(); String ind

place
while(set.contains(number)){
编号=customer.generateCustomerID(“AB”,1);
}
之前
set.add(编号);customer.setCustomerID(编号);

考虑此解决方案

  public String generateCustomerID(String id, int digit)//Customer Class

   randomGenerator = new Random();

   String index = "";

   for(int i = 1; i <= digit; i++)
   {  

       index +=  randomGenerator.nextInt(10);

   }
      return id + index;

   public void storeCustomer(Customer customer)//Shop Class
   {
    customerList.add(customer);
    HashSet<String> set = new HashSet<>();
    String number =   customer.generateCustomerID("AB", 1);

    set.add(number);
    customer.setCustomerID(number);

   }
staticsettake=newhashset();
公共静态void main(字符串[]args)
{
扫描仪扫描=新扫描仪(System.in);
while(true){
System.out.println(“输入id”);
String id=scan.nextLine();
如果(采取。包含(id)){
System.out.println(“已获取”);
继续;
}
take.add(id);
System.out.println(“其他[y/n]?”);
if(scan.nextLine().equals(“n”))
打破
}
}

关键的一点是,
set
是一个字段,它是使用
contains

检查的。您在创建唯一ID或使用的集合方面有问题吗?这些客户最终是否存储在数据库中?他们需要在什么范围内唯一?我在创建唯一ID方面有问题。可能的dup很多人正在
storeCustomer
中定义
集合
,因此每次调用此方法时都会重新创建该集合-将其作为字段移动。此外,您似乎没有检查该集合以查看该数字是否存在可能
!contains
?很抱歉,它应该是
contains(number)
。但是我的答案有什么问题吗?请参阅OP下面的我的评论question@James我把
HashSet=new HashSet();
作为实例放在类中。我明白了。这段代码只是检查id是否已经被获取了吗?是的,
if(take.contains(id)){
我尝试了您的代码,但我不知道如何将id存储到customer中。以及根据您的原始代码
customer.setCustomerID(number);
只需将
number
替换为我更有意义的命名变量
id
    static Set<String> taken = new HashSet <>();
    public static void main(String [] args)
    {
        Scanner scan = new Scanner (System.in);
        while (true) {
            System.out.println("enter id ");
            String id = scan.nextLine();
            if (taken.contains(id)) {
                System.out.println("already taken");
                continue;
            }
            taken.add (id);
            System.out.println("another [y/n]? ");
            if (scan.nextLine().equals("n"))
                break;
        }
    }