gpt4 book ai didi

java:循环生成随机数

转载 作者:行者123 更新时间:2023-12-02 08:00:15 28 4
gpt4 key购买 nike

我不确定我对 Random 类的使用是否正确——也许我误解了它。 (不过,我在 Google 中多次看到过这种用法。)

我试图通过连接随机数和字符串来生成唯一的发票号码,在数据库中查找该发票以查看它是否存在,如果存在,则创建一个新的发票号码并重试。以下是我的代码,下面是用于测试 while 子句真实性的方法:

String iname = "foo";
int sequence = 0;
String invoice_name = "";
Random generator = new Random();
do {
sequence = generator.nextInt( 1000 );
invoice_name = iname + String.format("%03d", sequence);
} while( !isUniqueInvoiceName( invoice_name, params, qb )

// QueryBatch is just a caching mechanism and batch committer for queries
private boolean isUniqueInvoiceName(String invoice_name, HashMap params, QueryBatch qb) {
if( params.get("x_invoice_num") == null ) params.put( "x_invoice_num",invoice_name );
// Invoice.select returns the primary key of the top 1 invoices found, or 0 if none found.
int pk = Invoice.select(params, qb);
System.out.println("============= pk = " + pk + " =============");
return ( pk == 0 );
}

发生的情况是错误日志显示 pk = 13 (或其他内容),然后无限重复该消息。我不明白为什么。是否未生成新的随机数?或者是 select 方法在不查看新参数的情况下返回相同结果的唯一解释?也许是缓存问题?这是在 tomcat/MS SQL 上。

最佳答案

我认为问题出在这一行:

if( params.get("x_invoice_num") == null ) params.put( "x_invoice_num",invoice_name );

第一次设置x_invoice_num值后,它将永远不会再为空,因此它永远不会更新。我认为您根本不希望 put() 有条件。

关于java:循环生成随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8995933/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com