【问题标题】:About generating unique random numbers关于生成唯一随机数
【发布时间】:2017-09-24 15:24:43
【问题描述】:
  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);

   }

如何确保只存储具有唯一 ID 的客户。例如,如果客户 A 的 id 为“AB-1”,那么客户 B 应该有一个不同的 id,如“AB-8”。我尝试使用 Hashset,但我不确定这是解决此问题的正确方法。我认为我不需要使用 UIDD。

【问题讨论】:

  • 您是否在制作唯一 ID 时遇到问题,或者您正在使用的集合有问题?
  • 这些客户最终会被存储在数据库中吗?它们需要在什么范围内独一无二?
  • 我在制作唯一 ID 时遇到了问题。
  • 您在storeCustomer 中定义您的set,因此每次调用此方法时都会重新创建它 - 将其作为字段移动。此外,您似乎没有检查此集合以查看该数字是否存在

标签: java


【解决方案1】:

考虑这个解决方案

    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;
        }
    }

关键是set 是一个字段,使用contains 进行检查

【讨论】:

  • 我明白了。这段代码是否只是检查 id 是否已经被占用?
  • 是的,if (taken.contains(id)) {
  • 我尝试了您的代码,但我不知道如何将 id 存储到客户中。
  • 以及根据您的原始代码customer.setCustomerID(number); 只需将number 替换为我更有意义的命名变量id
【解决方案2】:

地点
while(set.contains(number)){ number = customer.generateCustomerID("AB", 1); } 前 set.add(number);customer.setCustomerID(number);

【讨论】:

  • 也许!contains ?
  • 抱歉应该是contains(number)。但是我的回答有什么问题?
  • 在 OP 的问题下方查看我的评论
  • @James Tomy 将HashSet&lt;String&gt; set = new HashSet&lt;&gt;();作为实例放在您的班级中。
猜你喜欢
  • 2020-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-03
  • 2013-03-13
  • 2014-04-26
相关资源
最近更新 更多