2016-03-29 11 views
1

Ich mache eine Zuweisung für die Klasse, die erfordert, dass ich ein Array erstellen und hinzufügen, wie der Benutzer wünscht. Hier ist, was ich bisher:Java - Hinzufügen zu einem Array mit copyOf

public void add(Scanner stdIn) 
{ 
    entries = new String[1]; 
    Contact add = new Contact(); // Instantiate new Contact instance 

    String name; 
    System.out.print("Enter the contact's name: "); 
    name = stdIn.next(); 
    add.setName(name); // set name in Contact class 

    String address; 
    System.out.print("Enter the contact's address: "); 
    address = stdIn.next(); 
    add.setAddress(address); // set address in Contact class 

    String phone; 
    System.out.print("Enter the contact's phone number: "); 
    phone = stdIn.next(); 
    add.setPhone(phone); // set phone number in Contact class 

    String email; 
    System.out.print("Enter the contact's email address: "); 
    email = stdIn.next(); 
    add.setEmail(email); // set email address in Contact class 

    final int N = entries.length; 

    entries = Arrays.copyOf(entries, N + 1); 

    entries[0] = add.toString(); 

    System.out.print(Arrays.toString(entries)); 

} // end add 

Ich bin nicht allzu vertraut mit Arrays verwenden, so versuchen, das alte Array zu kopieren und ein neues Array mit den alten Informationen zu erstellen, sowie neue Informationen hinzuzufügen mich anspielt. Die toString Methode sieht wie folgt aus:

@Override // Overrides method from java.lang.Object 
    public String toString() // Displays the info for a contact in order 
    { 
     return getName() + "\t" + getAddress() + "\t" + getPhone() + 
       "\t" + getEmail(); 
    } 

Wenn Sie weitere Klarstellung benötigen, lassen Sie es mich wissen! Danke für die Hilfe!

+0

Sie uns ein Array gezwungen werden? Warum nicht eine ArrayLIst verwenden? Darüber hinaus müssen Sie Ihr Array/Ihre Liste außerhalb dieser Methode definieren, andernfalls wird es den Bereich verlassen, wenn die Methodenausführung abgeschlossen ist und die Daten verloren gehen. Veröffentlichen Sie auch Ihre gesamte Klasse. – pczeus

+0

Ich denke, du meinst "entziehen" und nicht "anspielen". Zeige nicht auf dein Problem an; Bitte sei explizit. Was genau funktioniert nicht? Erhalten Sie Fehlermeldungen? Eine Ausnahme mit einem Stack-Trace? Falsche Ausgabe? – rgettman

+0

Danke @pczeus. Ich bin gezwungen, ein Array zu verwenden, also war deine Lösung perfekt! Ich sehe genau, was Sie mit dem Umfang des Arrays meinen, also war es eine großartige Lösung, diese Änderungen vorzunehmen, um das Array außerhalb der add-Klasse zu halten. Jetzt muss ich herausfinden, wie man die Einträge entfernt und aktualisiert: D Danke nochmal für deine Hilfe! –

Antwort

0

Wie ich in Ihrem Kommentar erwähnt habe, müssen Sie das Array außerhalb der Methode definieren (könnte stattdessen eine ArrayList verwenden) oder es wird den Gültigkeitsbereich verlassen und die Daten gehen zwischen den Aufrufen der add-Methode verloren.

Hier Beispielcode zeigt, wie mehrere Anrufe zu tätigen() hinzuzufügen, jedes Mal das Array um 1 erweitert und das Drucken des Sende:

import java.util.Arrays; 
    import java.util.Scanner; 

    public class ArrayCopy { 
     String[] entries = new String[0]; 

     public void add(Scanner stdIn) 
     { 
      entries = Arrays.copyOf(entries, entries.length + 1); 

      Contact add = new Contact(); // Instantiate new Contact instance 

      String name; 
      System.out.print("Enter the contact's name: "); 
      name = stdIn.next(); 
      add.setName(name); // set name in Contact class 

      String address; 
      System.out.print("Enter the contact's address: "); 
      address = stdIn.next(); 
      add.setAddress(address); // set address in Contact class 

      String phone; 
      System.out.print("Enter the contact's phone number: "); 
      phone = stdIn.next(); 
      add.setPhone(phone); // set phone number in Contact class 

      String email; 
      System.out.print("Enter the contact's email address: "); 
      email = stdIn.next(); 
      add.setEmail(email); // set email address in Contact class 

      entries[entries.length-1] = add.toString(); 

      System.out.println(Arrays.toString(entries)); 

     } // end add 

     public static void main(String[] args) { 
      ArrayCopy program = new ArrayCopy(); 
      Scanner scan = new Scanner(System.in); 
      String op = ""; 

      System.out.println("Press A to add a user or E to exit."); 
      while(!(op = scan.nextLine()).equalsIgnoreCase("E")){ 
       switch(op){ 
        case "A": 
         program.add(scan); 
         break; 
        case "E": 
         System.out.println("Good Bye."); 
         System.exit(0); 
       } 
      } 

     } 
    } 
Verwandte Themen