2015-01-12 81 views
0

我需要帮助。如何将信息添加到ArrayList中已有的对象?

我有一个ArrayList完整的客户端/客户名称。我想要做的是编写一个代码,以便它询问我的客户名称,然后输入它,如果它发现它将一个电话号码添加到客户端。一旦添加,如果我想打印列表,电话号码将在该特定客户端旁边。

我有3个班。 1是客户端类(具有变量 - 名称,地址,数字)和一个JobManager(整个测试程序使用诸如添加客户端和删除一个的方法)。

这是我如何将客户的样子:

public static void addClient() { 

    System.out.println("Adding a client: \n"); 

    System.out.print("What is the name of the new client?: "); 
    String name = keyboard.nextLine(); 

    System.out.println(); 

    if (name.length() == 0) { 
     boolean invalid = true; 

     while (invalid) { 
      System.out.println("You cannot enter a blank name for the client. "); 
      System.out.print("Please enter a valid name: "); 
      name = keyboard.nextLine(); 

      if (name.length() > 0) { 
       invalid = false; 
      } 
     } 
    } 

    System.out.print("What is the client's address?: "); 
    String address = keyboard.nextLine(); 

    boolean isDuplicate = false; 

    for (int i = 0; i < clientList.size(); i++) { 
     String listName = clientList.get(i).getName(); 
     String listAddress = clientList.get(i).getAddress(); 

    if (listName.equalsIgnoreCase(name) 
       && listAddress.equalsIgnoreCase(address)) { 
      isDuplicate = true; 

     if (listName.equalsIgnoreCase(name)) { 
      isDuplicate = true; 

     } 
    } 

    if (isDuplicate) { 

     System.out.println(); 
     System.out.println("Error, that client already exists! \n"); 
     isDuplicate = false; 

    } else { 

     Client client = new Client(name, address); 
     clientList.add(client); 
     System.out.println(); 
     System.out.println("Client has been added. \n"); 

     } 
    } 
} 

而这正是我的客户端类的样子:

public class Client { 

    private ArrayList<JobManager> jobManager; 
    private ArrayList<TelephoneNumber> telephoneNumbers = new ArrayList<>(); 

    private String name; 
    private String address; 
    private static int number; 

    public Client(String name,String address) { 

     this.name = name; 
     this.address = address;  
    } 

    // public void createNumber() { 
    // TelephoneNumber teleNumber = new TelephoneNumber(number); 
    // telephoneNumbers.add(teleNumber); 

    //} 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getAddress() { 
     return address; 
    } 

    public void setAddress(String address) { 
     this.address = address; 
    } 

    public static int getNumber() { 
     return number; 
    } 

    public void setNumber(int number) { 
     this.number = number; 
    } 

    public String toString() { 
     String result; 

     result = name + "\n" + address; 

     result = (this.getName() + "\t" + this.getAddress()); 

     return result; 
    } 
} 

在此先感谢您的答案家伙!

+0

你的问题是什么? – Babel

+0

我只是不知道如何将电话号码添加到列表中存在的特定客户端。 – Kanox

+1

你有'Client'中的电话号码列表,但没有方法添加一个。你不认为增加一种方法来将电话号码添加到“客户端”实例会有帮助吗? – Tom

回答

0

我已经开发了从您的示例代码中的一小我的硬盘enter code here编码的电话号码,并在主要方法是在我的测试场景中输入用户输入V3作为硬编码2。

客户端类

public class Client { 

private String name; 
private List<String> telephoneNumber; 

Client(String name) 
{ 
    this.name = name; 
} 

public List<String> getTelephoneNumber() { 
    return telephoneNumber; 
} 

public void setTelephoneNumber(List<String> telephoneNumber) { 
    this.telephoneNumber = telephoneNumber; 
} 

public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public boolean equals(Object obj) 
{ 
    Client c = (Client)obj; 
    return this.name.equals(c.name); 
} 

的TestClass

public class HelloWorld{ 
Scanner keyboard = new Scanner(System.in); 



public static void main(String[] args) throws Exception { 

    List<Client> clientList = new ArrayList<Client>(); 
    Client c1 = new Client("V1"); 
    Client c2 = new Client("V2"); 
    Client c3 = new Client("V3"); 
    Client c4 = new Client("V4"); 

    clientList.add(c1); 
    clientList.add(c2); 
    clientList.add(c3); 
    clientList.add(c4); 

    HelloWorld h = new HelloWorld(); 
    h.addTelephone(clientList); 

    Client cTest = clientList.get(2); 
    System.out.println(cTest.getTelephoneNumber()); 





} 
public void addTelephone(List<Client> clientList) 
{ 
    System.out.print("What is the name of the new client?: "); 
    String name = keyboard.nextLine(); 
    Client c = new Client(name); 
    if(clientList.contains(c)) 
    {//Client Already Exist 
     int i = clientList.indexOf(c); 
     Client c1 = clientList.get(i); 
     List<String> telNumber = new ArrayList<String>(); 
     getTelephoneNumbers(telNumber); 
     c1.setTelephoneNumber(telNumber); 
    } 

} 
} 
public void getTelephoneNumbers(List<String> telephone) 
{ 
    boolean isExit = false; 

    while(!isExit) 
    { 
     System.out.println("Enter Telephone Number or 0 for exiting : "); 
     String telp = keyboard.nextLine(); 
     if("0".equalsIgnoreCase(telp)) { 
      System.out.println("Exiting"); 
      isExit = true; 
     } 
     else { 
      telephone.add(telp); 
     } 
    } 
} 

您可以使用相同的排序addTelephone多个方法。

+0

它确实清除了一些内容,但我使用用户输入方式添加电话号码。 – Kanox

+0

@Cryphisss你能告诉我们你输入的电话号码吗? – robin

+0

这是我到目前为止:http://pastebin.com/K1Fdn54V 它编译但它不会添加任何东西。 – Kanox

0

你可以做到这一点在这里:

if (listName.equalsIgnoreCase(name) 
      && listAddress.equalsIgnoreCase(address)) { 
     isDuplicate = true; 
     do { 
      TelephoneNumber phoneNumber = ..;//ask user for phone number and keep repeating until user enters 0 as one user can have multiple numbers 

      clientList.get(i).addNumber(phoneNumber); 
     } while (!phoneNumber.getNumber().equals("0")) 


    //if (listName.equalsIgnoreCase(name)) { //removed duplicate conditions 
     // isDuplicate = true; 

    //} 
} 

并在您的客户端类中添加addNumber添加numberiñ名单为:

public void addNumber(TelephoneNumber phoneNumber) { 
    telephoneNumbers.add(phoneNumber); 
} 
+0

发现这非常有用。仍在研究代码。将其标志为一旦其工作的解决方案! – Kanox

+0

很高兴帮助:) – SMA

0

如果你要电话号码添加到特定的客户端首先必须在数据库中搜索该客户端:

public Client searchByName(String name){// find one client and return client;} 

然后设置编号:

public void addNumber(int number){ Client client=searchByName(); client.setNumber(number);} 
+1

嗯什么?这不符合法律Java语法。 – sprinter

+0

什么?他们是2类方法;有什么问题?也许是搜索方法;我没有完全写出它;它必须发送查询到数据库并找到1个客户端;然后设置其号码 – Nazila

0
public void addNumberToClients(String clientName, TelephoneNumber number) { 
    clientList.stream() 
     .filter(client -> client.getName().equals(clientName)) 
     .forEach(client -> client.addNumber(number); 
} 

这将号码添加到所有客户端与给定的名称。将其添加到只有一个,改变.forEach().findFirst().ifPresent()

的方法然后添加到Client

​​