2014-11-02 84 views
0

我想解決這個問題,而不使用arraylist。 我想將聯繫人添加到字符串數組中的特定索引。然後以逗號分隔字符串格式顯示所有添加的聯繫人。 我的代碼只給出了最後一個添加合同的結果: 聯繫人[first = Bob,last = Moore,number = 555-9756] 問題在哪裏? 有什麼想法如何解決???在java中的字符串數組

這個類包含的主要方法:

這是主要的類:

public class ExampleApp { 

    public static void main(String[] args) { 

     PhoneBook pb = new PhoneBook("Personal book"); 
     System.out.println(pb.getName()); 

     pb.add("Alice", "Green", "555-1234"); 
     pb.add("Mary", "Smith", "555-6784"); 
     pb.add("Bob", "Moore", "555-9756"); 

     System.out.println(pb.toString());// here i want to display all the contracts seperated by commas 

     System.out.println(pb.first());// first contract 

     System.out.println(pb.get(2));// second contract 

     String toBeFound = new String("Moore"); 
     System.out.println(pb.find(toBeFound));// display the found contract 
    } 
} 

這是電話簿類:

public class PhoneBook { 
    public static final int MAX = 10; 
    public String name; 
    String[] contracts = new String[MAX]; // i created an array of strings 
    Contact c; 

    /** 
    * Create a new phonebook with given name 
    */ 
    public PhoneBook(String name) { 
     this.name = name; 
    } 

    /** 
    * Return the phonebook name 
    */ 
    public String getName() { 
    return name; 
    } 

    /** 
    * Insert a new contact at the end 
    */ 
    public void add(String first, String last, String number){ 
    c=new Contact(first,last,number); 

    for(int i=0;i<MAX;i++){ // i added for each array index the contracts strings 

      contracts[i]= c.toString(); 
    } 

    } 

    /** 
    * Return the first contact 
    */ 
    public String first() { 
     return get(1); 
    } 

    /** 
    * Return the i-th contact (supposing that first 
    * index is 1) 
    */ 
    public String get(int i) { 
     String s =contracts[i].toString(); 
     return s; 
    } 

    /** 
    * Return a string containing the list of textual 
    * representation of all contacts, separated by ", ". 
    * List starts with "("and ends with ")" 
    */ 
    public String toString() { 
     String s= " "; 
     for(int i=1;i<MAX;i++){ // here i tried to display the string looping the array 
      s=contracts[i].toString(); 
     } 
     return s; 
    } 

    /** 
    * Return the textual representation of first 
    * contact containing "needle" 
    */ 
    public String find(String needle) { 
     //TODO: to be implemented 
     return null; 
    } 

} 

這是接觸類:

public class Contact { 
public String first; 
public String last; 
public String number; 
public String[] contacts; 
public Contact(String first, String last, String number) { 
    this.first=first; 
    this.last = last; 
    this.number=number; 
} 
public String getFirst() { 
    return first; 
} 
public void setFirst(String first) { 
    this.first = first; 
} 
public String getLast() { 
    return last; 
} 
public void setLast(String last) { 
    this.last = last; 
} 
public String getNumber() { 
    return number; 
} 
public void setNumber(String number) { 
    this.number = number; 
} 
@Override 
public String toString() { 
    return "Contact [first=" + first + ", last=" + last + ", number=" 
      + number + "]"; 
} 


} 

回答

0

您可以使用ArrayList。它會幫助你很多,你應該讓你的私人祕密。

private String first; 
private String last; 
private String number; 

private ArrayList<String> list = new ArrayList<String>(); 

for(String pointer : list){ 

} 

,或者你可以接觸保護的ArrayList

private ArrayList<Contact> list = new ArrayList<Contact>(); 

    public Contact(String first, String last, String number) { 
    this.first=first; 
    this.last = last; 
    this.number=number; 
} 
public void add(String first, String last, String number){ 
    c=new Contact(first,last,number); 
    list.add(c); 
} 

,你可以訪問所有veriables這樣list.get(i).first。 您可以將您的聯繫人類別和合同數組保存在arraylist中,它將爲您提供更多訪問權限。如果你想顯示你的ArrayList,哪個索引不重要,你只需要++ i就可以了。

我改變你的班級看看這個:

public class PhoneBook { 
    public static final int MAX = 10; 
    public String name; 
    String[] contracts = new String[MAX]; // i created an array of strings 
    Contact c; 
    private int count = 0;// saved last index of array 
    public PhoneBook(String name) { 
     this.name = name; 
    } 
    public String getName() { 
     return name; 
    } 
    public void add(String first, String last, String number) { 
     c = new Contact(first, last, number); 

     contracts[count] = c.toString(); // save your String inside of last index++ 
     count++; 

    } 
    public String first() { 
     return get(1); 
    } 

    public String get(int i) { 
     String s = contracts[i].toString(); 
     return s; 
    } 

    public String toString() { 

    for (int i = 0; i < MAX; i++) { 
     if (contracts[i] != null) 
      System.out.println(contracts[i].toString()); 
    } 
    return ""; 
} 

    public String find(String needle) { 

     return null; 
    } 

} 

public class Contact { 
    public String first; 
    public String last; 
    public String number; 

    public Contact(String first, String last, String number) { 
     this.first = first; 
     this.last = last; 
     this.number = number; 
    } 

    @Override 
    public String toString() { 
     return "Contact [first=" + first + ", last=" + last + ", number=" 
       + number + "]"; 
    } 

} 

//Personal book 
//Contact [first=Alice, last=Green, number=555-1234] 
//Contact[first=Mary, last=Smith, number=555-6784] 
//Contact [first=Bob, last=Moore, number=555-9756] 

你總是刪除最後toString方法。你的Add方法是錯誤的。您總是將0變爲0,然後再次寫入數組。如果

+0

感謝您的答案,但在這裏我試圖解決不使用arraylist – Niranjan 2014-11-02 11:40:45

+0

for(int i = 0; i 2014-11-02 11:54:03

+0

@Niranjan你的add方法和toString方法是錯誤的 – 2014-11-02 12:00:56

0

你應該跟蹤添加到您的數組中最後的接觸:

private int lastIndex = 0; // index of first available index of the array 
    ... 

    /** 
    * Insert a new contact at the end 
    */ 
    public void add(String first, String last, String number){ 
    c=new Contact(first,last,number); 
    if (lastIndex < MAX) 
     contracts[lastIndex++]= c.toString(); 
    } 

其他一些問題與您的代碼:

/** 
    * Return the first contact 
    */ 
    public String first() { 
     return get(1); // should be get(0) 
    } 

調用toString()contracts[i]是多餘的,因爲它已經是一個字符串。也許你打算在你的數組中存儲Contact實例而不是字符串?這會更有意義。

+0

運營商<未定義的參數類型字符串,整數 – Niranjan 2014-11-02 11:25:04

+0

@Niranjan對不起,我沒有注意到你已經有了一個'last'該方法中的參數。將其重命名爲'lastIndex'。 – Eran 2014-11-02 11:29:20

0
  1. 添加一個額外的變量static int Last = 0;跟蹤您已添加的聯繫人數量,並將添加的功能更新爲。

    public void add(String first, String last, String number){ 
        if(Last>=MAX){ 
         System.out.println("Error in adding\n"); 
        } 
        else{ 
         c=new Contact(first,last,number); 
         contacts[Last] = c.toString(); 
         Last++; 
        } 
    } 
    
  2. 將Tostring()循環更改爲最後。因此,您將只打印添加的聯繫人。在您的情況下,您正在打印MAX,這是錯誤的,當添加的聯繫人數量減少時。

  3. 您必須通過i = 0,1,2,...,MAX-1才能獲得(i)函數。數組是基於零(0)的索引。
+0

縮進不起作用。 – 2014-11-02 11:31:10

+0

可否請你詳細解釋一下toString()函數; public String toString(){ \t String s =「*」; \t for(int i = 0; i Niranjan 2014-11-02 11:35:06

+0

如果我使用這種方法,結果中有一個nullpointerexception! – Niranjan 2014-11-02 11:39:01

0

不知道我理解你的所有代碼的權利,但我認爲你是覆蓋在你的電話簿中的所有其他聯繫人:

public void add(String first, String last, String number){ 
    c=new Contact(first,last,number); //(1) 

    for(int i=0;i<MAX;i++){ //(2) 
     contracts[i]= c.toString(); 
    } 

}

在位置(1)新Contact對象被創建並分配到c。在接下來的步驟(2)中,循環訪問陣列,並將c(添加的最新聯繫人)中包含的信息分配給contracts陣列中所有已存在的條目。

與你的問題無關,我建議你用一個類型爲Contact的ArrayList替換一個固定大小的數組。添加條目到這個列表,迭代,排序等是非常容易的。

0

因此,您遇到的問題是您總是檢索上次聯繫人,而不管您嘗試獲取哪個聯繫人。這是因爲當你添加一個新的聯繫人時,你實際上替換了所有聯繫人,使他們都一樣。您正在從電話簿中獲得正確的聯繫人,但它們都具有相同的值。

爲了解決這個問題,請執行下列操作:

public class PhoneBook 
{ 
    int contactsAdded = 0; // Add an integer to store how many contacts you have added 
    Contact[] contacts = new Contact[MAX]; //Change this to Contact array, not string 
    //Contact c; //You can remove this line 
    //Rest of your code 
} 

public void add(String first, String last, String number) 
{ 
    //Only add if the number of contacts is less than the max 
    if (contactsAdded < MAX) 
    { 
     //Construct the new contact when you use it. 
     contacts[contactsAdded] = new Contact(first, last, number); 
     contactsAdded++; 
    } 
}