2017-10-16 15 views
-3

他のクラスからArrayListにアクセスするにはどのようにしたらよいか分かりません。何百もの類似したトピックを読んでいますが、何をしようとしているのか正確には分かりません。私はsetLoginChoiceの下にあります。これは、ログインクラスからArrayListを読み取る必要があります。また、ArrayListを動的に作成しようとしているので、ユーザーの新しいエントリで更新できます。私はなぜArrayListを読んでいるときに私にnull値を与えているのだろうと思っています。別のクラスからArrayListにアクセスする

EDITは、たぶん私はダムですが、私は理解してから、私が作成したArrayListには(引数の数が同じ)顧客のメソッド右?に基づいています。だから私は "apostcode"(配列から各リストから1つの要素)を読み取ろうとしているとき、私はnull値を与えるメソッド "顧客"から実際に "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です。

コードをデバッグすると、値を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

arraylistのサイズは確認できますが、各リストの要素は確認できません。 – Stefan

+0

お手数をおかけします。 – Stefan

関連する問題