2017-10-16 124 views
-3

我很難找到如何從另一個類訪問ArrayList。我讀了數百個類似的主題,但無法弄清楚我正在嘗試做什麼。我有下面的setLoginChoice應該從登錄類讀取ArrayList。我也想動態地創建ArrayList,以便可以用來自用戶的新條目進行更新。我想知道爲什麼當我閱讀ArrayList給我空值。從不同的類訪問ArrayList

編輯

也許我愚蠢的,但我從理解,我創建了ArrayList的是基於客戶的方法嗎?(有相同數量的參數)。所以當我試圖讀取「apostcode」(從數組中的每個列表中的一個元素)時,我實際上是從方法「Customer」中讀取「apostcode」,它給了我一個空值。什麼是正確的方式來做到這一點:)?

public class Customer { 

    private static String customerId; 
    private static String firstName, lastName; 
    private static String address, dateOfBirth, telephoneNumber, cprNumber; 
    private static String userName, password, logInCredentials; 
    private static int postCode; 
    String auserName; 
    String apassword; 
    String apostCode; 
    String adateOfBirth ; 
    String afirstName ; 
    String alastName ; 
    String aaddress ; 



     public Customer (String afirstName,String aaddress ,String alastName, int apostCode, String acprNumber, String atelephoneNumber, String adateOfBirth , String auserName, String apassword) 
    { 
     adateOfBirth = dateOfBirth; 
     afirstName = firstName; 
     alastName = lastName; 
     apostCode = postCode; 
     aaddress = address; 
     acprNumber = cprNumber; 
     atelephoneNumber = telephoneNumber; 
     apassword = password; 
     auserName = userName; 


    } 

    public static boolean setLoginChoice (int choiceForLogIn) { 
    ArrayList <Customer> myUsers = (new Login()).login(); 

    Scanner input = new Scanner(System.in); 
     System.out.println("Enter your username: "); 
     inputUsername = input.nextLine(); 
     System.out.println("Enter your password: "); 
     inputPassword = input.nextLine(); 
     System.out.println("before"); 

     for(int i = 0; i < myUsers.size(); i++){ 
      System.out.println("loopfor"); 
      System.out.println(myUsers.get(i).apostCode); 


      /*if(myUsers.get(i).auserName.compareTo(getInputuserName()) == 0 && myUsers.get(i).apassword.compareTo(getInputPassword()) == 0) 
      { 
      System.out.println("Welcome"); 
      return true; 

      }else { 
       System.out.println("insideloop"); 
      }*/ 

     } 
     System.out.println("after"); 
     return false; 
    } 




    public class Login{ 

     ArrayList<Customer> myUsers; 

     public ArrayList<Customer> login() { 

    // TODO Auto-generated method stub 
    ArrayList<Customer> myUsers = new ArrayList<Customer>(); 
    Customer d = new Customer(null, null, null, 0, null, null, null, null, null); 
    myUsers = new ArrayList<Customer>(); 

    myUsers.add(new Customer("User1", "bane", "User1nick", 7444, "111116-4421", "55555555", "11/05/1993", "User3", "Joe")); 
    myUsers.add(new Customer("User2", "bane", "User2nick", 7444, "111116-4021", "55555555", "11/05/1993", "User3", "Stefan2")); 
    myUsers.add(new Customer("User3", "bane", "User3nick", 7444, "111116-4021", "55555555", "11/05/1993", "User3", "Adi2")); 
    myUsers.add(new Customer(d.getfirstName(), d.getAddress(), d.getlastName(), d.getPostCode(), d.getCprNumber(), d.getTelephoneNumber(), d.getdateOfBirth(), d.getUsername(), d.getPassword()));; 

    return myUsers; 
} 


} 
+2

客戶爲什麼要擴展登錄? – WilomGfx

+0

好的,我做了一些改變,我忘了刪除,我嘗試了不同的幾十種方法..我編輯我的帖子 – Stefan

+0

是變量,例如, 'ausername'私人? –

回答

0

你的構造函數有問題。你應該在構造函數中過去了,這樣的數據初始化對象數據:你打算用靜態字段

public Customer (String afirstName,String aaddress ,String alastName, int apostCode, String acprNumber, String atelephoneNumber, String adateOfBirth , String auserName, String apassword){ 
    this.adateOfBirth = adateOfBirth ; // adateOfBirth instead of dateOfBirth 
    this.afirstName = afirstName ; // ... 
    this.alastName = alastName ; 
    this.apostCode = apostCode ; 
    this.aaddress = aaddress ; 
    this.acprNumber = acprNumber ; 
    this.atelephoneNumber = atelephoneNumber ; 
    this.apassword = apassword ; 
    this.auserName = auserName ; 
} 

不知道該怎麼做了。

+0

感謝您的幫助 – Stefan

0
private static String customerId; 
private static String firstName, lastName; 
private static String address, dateOfBirth, telephoneNumber, cprNumber; 

這些變量總是空。

當你調試你的代碼時,你可以看到你將你的值覆蓋爲null。

adateOfBirth = dateOfBirth; 
    afirstName = firstName; 
    alastName = lastName; 
    apostCode = postCode; 
    aaddress = address; 
    acprNumber = cprNumber; 
    atelephoneNumber = telephoneNumber; 
    apassword = password; 
    auserName = userName; 

所以所有的元素都是null的數組。因爲當這條線被執行。

myUsers.add(new Customer("User1", "bane", "User1nick", 7444, "111116-4421", 
"55555555", "11/05/1993", "User3", "Joe")); 

它調用Customer函數並且所有參數都是正確的,但是當它返回所有的值時都是null,如前所述。代碼就像

myUsers.add(null, null, etc...); 
+0

它可以看到數組列表的大小,但不是每個列表的元素。 – Stefan

+0

感謝您的幫助 – Stefan