Sha*_*ram 2 java arrays contains arraylist
我为我的程序编写了以下类:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
此类的目的是生成唯一的引用号并将其存储在数组中.在这之前,它需要检查数组是否已包含该值.如果不是,则n递增1,直到refNo成为数组中不存在的唯一值.
RefGen.reference()的调用genButton在InGenUI.java其中输出的引用号的值以clientLabel也InGenUI.java:
private void genButtonActionPerformed(java.awt.event.ActionEvent evt) {
RefGen.generate();
String refNo = RefGen.reference();
clientLabel.setText(refNo);
}
Run Code Online (Sandbox Code Playgroud)
程序生成引用号但从不递增InGenUI.java中的标签值或RefGen.java中的实际数组本身.似乎数组在每次单击按钮时只保留一个值.
我认为refList存储了生成的原始refNo值,但每次执行时都会清空该数组.我怀疑每次单击genButton时,我实际上都在创建一个新的refList实例,从而消除旧的值.它是否正确?如果是这样,我如何在保留RefGen.java类的同时保护我创建的refList实例?
先感谢您.
您每次打电话时似乎都在创建一个新的数组列表generate:
//Create array to store reference
ArrayList<String> refList = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
您应该在类级别的方法之外声明它.