从另一个私有的 class 调用 arrayList

Calling an arrayList from another class which is private

我正在尝试在图形用户界面中显示数组列表。但是我遇到了一些麻烦。我需要检查我的游戏是否合法,如果不合法则调用显示数组列表的 getProblems。我试图在 GUI class 中直接调用 getProblems,但它会将数组显示为空。 (因为它不检查它是否合法)。我还尝试调用 isLegal,然后调用 getProblems,但您不能在 JOptionPane 中执行此操作。关于如何调用它的任何提示?

GetProblems class

 protected List < String > getProblems() {
     return displayOutput;
 }

合法Class

public boolean isLegal() {
  boolean legality;

  if (checkRowConstraints().isEmpty()) {
    legality = true;

  } else {
    getProblems();
    legality = false;

  }
  return legalCheck;
}

图形用户界面:

 public void actionPerformed(ActionEvent e) {
     if (!(puzzle.isLegal())) {
       JOptionPane.showMessageDialog(FutoshikiFrame.this,
         puzzle.getProblems(),
         "You made a mistake!",
         JOptionPane.INFORMATION_MESSAGE);

这是 GUI 结果的实际显示与我尝试获得的结果之间的差异。

Further Problem found: I need to return the arraylist then empty it. Fixed

目前,当您在 JOptionPane 中调用 puzzle.getProblems() 时,会隐式调用 ListtoString() 方法。因此,您得到的不是您想要的 List 的内容,而是 toString() 给您的任何内容。

您不会获得 List 的内容,除非您先对其进行迭代。

你可以尝试这样的事情。 (注意,这是未经测试的代码。用于演示目的。)

String formattedString = "";
//let's iterate over our List and build a formatted string for output
for(String element : puzzle.getProblems())
{
    formattedString += element;
}

然后你可以输出这个格式化String

 public void actionPerformed(ActionEvent e) {
     if (!(puzzle.isLegal())) {
       JOptionPane.showMessageDialog(FutoshikiFrame.this,
         formattedString,
         "You made a mistake!",
         JOptionPane.INFORMATION_MESSAGE);