我为我的程序编写了以下类:
public class RefGen {
private static String refNo;
protected static void generate(){
//Create array to store reference
ArrayList<String> refList = new ArrayList<>();
//Get date and set output format
DateFormat dateFormat = new SimpleDateFormat("yyMMdd");
Date curDate = new Date();
//Variables
String clientKey = InGenUI.clientText.getText();
String refDate = dateFormat.format(curDate);
String refType = InGenUI.typeCombo.getSelectedItem().toString();
String userName = InGenUI.userCombo.getSelectedItem().toString();
String ref;
int n = 1;
//Create Reference
refNo = clientKey.toUpperCase() + "/" + refDate + "/" + refType + "/" + userName + "/" + Integer.toString(n);
//Check to see if refNo already exists in array
while (refList.contains(refNo)) {
n = n + 1;
refNo = clientKey.toUpperCase() + "/" + refDate + "/" + refType + "/" + userName + "/" + Integer.toString(n);
refList.add(refNo);
}
refList.add(refNo);
System.out.println(refList);
}
public static String reference(){
return refNo;
}
}
此类的目的是生成唯一的引用号并将其存储在数组中。在此之前,需要检查数组是否已包含该值。如果不是,则 n 增加 1,直到 refNo 成为数组中不存在的唯一值。
RefGen.reference() 由 InGenUI.java 中的 genButton 调用,将 refNo 的值输出到 clientLabel 也在 InGenUI.java 中:
private void genButtonActionPerformed(java.awt.event.ActionEvent evt) {
RefGen.generate();
String refNo = RefGen.reference();
clientLabel.setText(refNo);
}
程序生成引用编号,但从不增加 InGenUI.java 中的标签值或 RefGen.java 中的实际数组本身。似乎该数组在每次单击按钮时只保存一个值。
我认为 refList 存储生成的原始 refNo 值,但每次都会清空数组。我怀疑每次单击 genButton 时,我实际上是在创建 refList 的新实例,从而清除旧值。它是否正确?如果是这样,我如何保护我创建的 refList 实例,同时将其保留在 RefGen.java 类中?
提前谢谢您。
最佳答案
每次调用generate
时,您似乎都会创建一个新的数组列表:
//Create array to store reference
ArrayList<String> refList = new ArrayList<>();
您应该在类级别的方法之外声明它。
关于Java - ArrayList 未检测到重复值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25012524/