【问题标题】:Getting unique id's Bank program java获取唯一id的银行程序java
【发布时间】:2014-10-30 19:01:24
【问题描述】:

我正在创建一个银行程序和 hava 类 Account(摘要)、SavingsAccountCustomer(等等)。当我创建一个新的savingsaccount 时,我想为每个帐户获取一个 ID。我的问题是我不知道如何使 id 独一无二。

我还缺少什么?我如何为客户和帐户使用ArrayList?还有其他建议吗?这对我来说很难,但我正在努力学习和理解。

在 Bank 类中,我创建了几个客户 c1 和 c2。然后,我为客户 c1 创建了两个帐户。

public class Bank {
    public static void main(String[] args) {

    ArrayList<Customer> customerList = new ArrayList<Customer>();  
    ArrayList<Account> accountList = new ArrayList<Account>();  

    Customer c1 = new Customer("John");
    Customer c2 = new Customer("Sam");        

    SavingsAccount a1 = new SavingsAccount(c1);
    SavingsAccount a2 = new SavingsAccount(c1);

    customerList.add(c1);
    customerList.add(c2);              

    accountList.add(a1);
    accountList.add(a2); 
    } 
}

在帐户类中:

public abstract class Account {  
   protected int balance;
   protected int id;
   protected double interest;
   protected Customer name;

   public Account() {}

   public Account(Customer name) {
   this.name = name;
   }

   public abstract void deposit(int amount); 

   public abstract void withdraw(int amount);

   public abstract int getBalance();

   public abstract void transfer(int amount, Account account);
}

在类 SavingsAccount:

public class SavingsAccount extends Account{ 
    public SavingsAccount() {
        super();
    }

    SavingsAccount(Customer person) {
        name = person;
        id = (int) Math.floor(Math.random()*101);  //This won't generate a unique number for each savingsaccount
    }  
}

【问题讨论】:

  • 如果您不将您的 uid 存储在一个表单中(如 Vaishak Suresh 的发音答案 #1),则不能保证它是唯一的 id - 这不太可能但不能保证 - 但您可以如果您只是为了练习而编写代码,请使用简单的文本文件而不是数据库(在这种情况下,UUID 也适合您……所以不要介意我的提示……

标签: java class random


【解决方案1】:

您在代码中所做的是获取 0 到 101 范围内的伪随机数。这并不能确保这些数字不会重复。确保生成唯一 ID 的一些方法是

  1. 如果您使用的是数据库,请使用数据库生成的自动增量编号
  2. 代码中有一个静态变量,每次分配 ID 时都会递增
  3. 编写某种形式的散列函数,根据客户对象生成整数 ID。
  4. 也使用UUID 生成唯一ID。这还可以让您随机计算它并获取 ID 等的哈希值。

【讨论】:

  • 谢谢。起初,我有一个想法,将 1-100 的数字保存在一个列表中,然后(以某种方式)从列表中选择数字。我会尝试你的第二个建议。
  • 5.使用简单的密码来加密 0、1、2、3 等。因为密码是可逆的,所以保证输出对于唯一输入是唯一的。
  • 我不认为 #3 是一个选项,甚至接受(要求?)相等的 ID 来表示相等的 Customer objects:哈希函数不需要是单射的,而且通常情况下,标准的映射对有限值集的无限输入 - 想想生日悖论。
【解决方案2】:

当然数学随机给你一个随机数但不是唯一的......使用 UUID.randomUUID().toString()

【讨论】:

  • 好的,我会尝试学习UUID.randomUUID().toString()。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
相关资源
最近更新 更多