【问题标题】:How do you pass an ArrayList to another Class? Java如何将 ArrayList 传递给另一个类?爪哇
【发布时间】:2018-06-12 12:01:54
【问题描述】:

我的代码有问题,我不太确定出了什么问题。

(请忽略方法名和类名。直到今天我才知道规则。)

我需要将一个 ArrayList 从一个类发送到另一个类。

这是我要将数组传递给的类。

public class AdminUserController implements Initializable {

UserData callClass = new UserData();

public void CreateUser(){
    callClass.main();
    out.println("Button Clicked");
    ArrayTest(ArrayList <Users> myUsers);
}

public void ArrayTest(ArrayList <Users> myUsers){
    for (int i = 0; i < myUsers.toArray().length; i++) {
        if (myUsers.get(i) != null) {
            for (Users aMyUsers : myUsers) {
                if (aMyUsers != null) {
                    out.println("This should display 10 times");
                }
            }
        }
    }
}

此代码是孤立的,不是完整的程序。

CreateUser 是一个 JAVA FX 按钮(我不确定是否可以通过这种方式传递参数)

我认为尝试激活 ArrayTest 方法的问题。

它需要通过按下按钮来激活。

这里是ArrayList所在的类。

        package BunnyCorp.Classes;

    import BunnyCorp.Controllers.AdminUserController;

    import java.util.ArrayList;

    public class UserData{

        public void main(){
        ArrayList <Users> myUsers = new ArrayList<>();

        Users myUsers0 = new Users(1000, "admin", "password", "N/A", " N/A", " N/A", "N/A", "N/A", "N/A", "N/A", "ADMIN");
        Users myUsers1 = new Users(1001, "lecturer", "capitalism", "Adam", "Smith", "127 High St", "Kirkcaldy", "KY5D8F", "03069990552", "16/06/1723", "STAFF");
        Users myUsers2 = new Users(1002, "president", "economics", "Ronald", "Reagan", "56 Bel-Air", "Los Caldy", "KY8BD2", "80865390552", "06/02/1911", "STAFF");
        Users myUsers3 = new Users(1003, "engineer", "memeword", "Tim", "Berners-Lee", "15 Westwood Place", "London", "KY9WWW", "07700900262", "08/06/1955", "STAFF");
        Users myUsers4 = new Users(1004, "polymath", "monalisa", "Leonardo", "da Vinci", "23 Via Mozza", "Florence", "FL9MLA", "07700900466", "15/04/1452", "MEMBER");
        Users myUsers5 = new Users(1005, "theoryman", "sexyphysics", "Richard", "Feynman", "Trump Tower", "New York", "NY5JEA", "03069990552", "11/05/1918", "MEMBER");
        Users myUsers6 = new Users(1006, "destroyerofworlds", "nuclearwar", "Julius Robert", "Oppenheimer", "20 Trinity Site", "New Mexico", "NKW194", "03069990828", "22/04/1904", "MEMBER");
        Users myUsers7 = new Users(1007, "crashtest", "dummy", "Samuel", "Alderson", "11 Marina Dey Rey", "California", "MDR238", "03069990011", "21/10/1914", "CASUAL");
        Users myUsers8 = new Users(1008, "Zucc", "dadada", "Mark", "Zuckerberg", "1456 Edgewood Drive", "California", "EWD238", "06505434800", "14/05/1984", "CASUAL");
        Users myUsers9 = new Users(1009, "bigmoney", "money", "Bill", "Gates", "1835 73rd Ave", "Washington", "WSA039", "2067093140", "28/10/1955", "CASUAL");

        myUsers.add(myUsers0);
        myUsers.add(myUsers1);
        myUsers.add(myUsers2);
        myUsers.add(myUsers3);
        myUsers.add(myUsers4);
        myUsers.add(myUsers5);
        myUsers.add(myUsers6);
        myUsers.add(myUsers7);
        myUsers.add(myUsers8);
        myUsers.add(myUsers9);

        AdminUserController UserCreator = new AdminUserController();
        UserCreator.ArrayTest(myUsers);
    }
}

我做错了吗?

我将不胜感激。我一直在网上寻找解决方案,但我一直在碰壁。

【问题讨论】:

  • ArrayTest(ArrayList &lt;Users&gt; myUsers); 构造函数中的这一行是什么?
  • 你知道这段代码是递归的吧?你将继续进入构造函数..它会给你StackOverflowException
  • ArrayTest(ArrayList myUsers);此行应替换为 ArrayTest(myUsers);其中 myUsers 是对象

标签: java arraylist javafx


【解决方案1】:

不确定你在构造函数中调用 main 方法做了什么,但你的打印方法有几个问题。

for (int i = 0; i < myUsers.toArray().length; i++) {
    if (myUsers.get(i) != null) {
        for (Users aMyUsers : myUsers) {
            if (aMyUsers != null) {
                out.println("This should display 10 times");
            }
        }
    }
}

1/ 不需要做 myUser.toArray().length,使用 myUsers.size()
2/ 在 if 语句中检查空用户后,打印出来,为什么还要循环遍历列表呢?它会打印数组列表两次

你的函数可能是这样的

for(Users aUser : myUsers){
  if(aUser!=null)
     System.out.println(aUser.toString());
}

for(int i = 0; i < myUsers.size(); i++){
   if(myUsers.get(i) != null)
      System.out.println(myUsers.get(i).toString());
}

如果您想知道他们的数组 myUser 在传递给函数时是否存在,请打印出它的大小,否则第一个元素就足够了。调试可能有助于解决这类问题。

【讨论】:

    猜你喜欢
    • 2022-11-18
    • 2013-12-10
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2012-11-19
    • 1970-01-01
    • 2021-03-11
    • 1970-01-01
    相关资源
    最近更新 更多