Java - ArrayList未检测到重复值

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实例?

先感谢您.

Jun*_*san 5

您每次打电话时似乎都在创建一个新的数组列表generate:

     //Create array to store reference
     ArrayList<String> refList = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)

您应该在类级别的方法之外声明它.