簡體   English   中英

java:在循環中生成隨機數

[英]java: generating random numbers in a loop

我不確定我對Random類的使用是對的 - 也許我誤解了它。 (但是,在我的谷歌中,我已多次看到過這種用法。)

我正在嘗試通過連接隨機數字和字符串來生成唯一的發票編號,在數據庫中查找該發票以查看它是否存在,如果存在,則創建新的發票編號並重試。 以下是我的代碼,下面是用於測試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值之后,它將永遠不再為null,因此它永遠不會更新。 我認為你不希望put()完全有條件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM