2014-02-28 84 views
-1

在這個程序中,我得到了ArrayList的錯誤輸出。 在第一行中,它總是水平地打印ArrayList的每個單獨元素。 然後它將正確地打印ArrayList。 有人可以看看代碼,看看我做錯了什麼嗎?我會告訴你兩個班。Java ArrayList輸出錯誤

第1類:

public class contactDriver 
{ 
public static void main (String[] args) 
{      
      Scanner scan = new Scanner(System.in); 

      System.out.println ("What would you like to do?"); 
      int answer; 
      System.out.println ("Press 1 to add a contact.");   
      System.out.println ("Press 2 to display all contacts."); 

      answer = scan.nextInt(); 

      ArrayList<Contact> contacts = new ArrayList<Contact>(); 

     contacts.add(new Contact("Patrick McGee", "334-555-8860", "[email protected]")); 
     contacts.add(new Contact("John Appleseed", "142-555-6740", "[email protected]")); 
     contacts.add(new Contact("Matt Jordan", "213-555-2323", "[email protected]")); 
     contacts.add(new Contact("Kanye East", "255-434-9909", "[email protected]")); 
     contacts.add(new Contact("Derrick Flower", "144-555-1111", "[email protected]")); 

      if (answer == 1){ 
       System.out.println ("Please enter the first and last name of the contact."); 
       String name = scan.next(); 
       scan.nextLine(); 

       System.out.println ("Please enter the phone number of the contact."); 
       String num = scan.next(); 
       scan.nextLine(); 

       System.out.println ("Please enter the email of the contact."); 
       String email = scan.next(); 
       scan.nextLine(); 

       contacts.add(new Contact(name, num, email)); 

       } 

      if (answer == 2){ 
       } 
       System.out.println(contacts); 
       for(Contact c : contacts) { 
       System.out.println(c); 

二級:

public class Contact 
{ 
public Contact(String name, String num, String email) 
{ 
    this.name = name; 
    this.num = num; 
    this.email = email; 
} 

public String getFirstname() 
{ 
    return name; 
} 

public String getNum() 
{ 
    return num; 
} 

public String getEmail() 
{ 
    return email; 
} 


public String toString() 
{ 
    return "Contact[" + name + ", " + num + ", " + email + "]"; 
} 

private String name; 
private String num; 
private String email; 

} 

輸出:

[聯繫[帕特里克麥基,334-555-8860,[email protected] ],聯繫人[John Appleseed,142-555-6740,[email protected]],聯繫人[Matt Jordan,213-555-2323,[email protected]],聯繫人[Kanye East,255-434-9909,keast123 @ gmail.com],Conta ct [Derrick Flower,144-555-1111,[email protected]]
(全部在一行中)。

然後打印:
聯繫[帕特里克·麥基,334-555-8860,[email protected]]
聯繫[約翰蘋果核戰,142-555-6740,[email protected]] ..等等。

修復的任何想法?

謝謝:)

+1

您的預期產量是多少? – Masudul

+0

預計什麼? – D3X

回答

1

輸出

[聯繫[帕特里克·麥基,334-555-8860,[email protected]],聯繫[約翰蘋果核戰,142-555-6740,jappleseed99 @ gmail.com],聯繫人[Matt Jordan,213-555-2323,[email protected]],聯繫人[Kanye East,255-434-9909,[email protected]],聯繫人[Derrick Flower,144-555 -1111,[email protected]]

歸因於

System.out.println(contacts); 

這會打印ArrayList contactsString表示(通過方法toString())。

編輯

爲了沒有得到這個輸出只需刪除該行。該for您使用打印的每個Contact看起來不錯:

for(Contact c : contacts) { 
    System.out.println(c); 
} 
+0

謝謝。我應該改變它來解決這個問題? – pmcg521

+0

@itr_patrick刪除該行。請參閱編輯。 – Christian

+0

哦,我完全錯過了! xD謝謝你們! – pmcg521

1

您已經正在打印的額外值的額外系統輸出語句。 System.out.println(contacts);打印數組列表中的所有元素(所有聯繫人在一行中)。

[聯繫[帕特里克·麥基,334-555-8860,[email protected]],聯繫[約翰蘋果核戰,142-555-6740,[email protected]],聯繫[馬特·喬丹,213- 555-2323,[email protected]],聯繫[Kanye East,255-434-9909,[email protected]],聯繫[Derrick Flower,144-555-1111,dflower1 @ gmail。com]

我想你只是想打印純文本「contacts」,然後打印每個聯繫人,就像這樣。

if (answer == 2){ 
    System.out.println("contacts:"); // prints the plain text contacts 
    for(Contact c : contacts) { 
     System.out.println(c); // prints each contact using the toString() implementation provided by you 
    } 
} 

如果您不想在列表中打印每個聯繫人之前打印任何文本,那麼只需刪除額外的sysout語句即可。

if (answer == 2){ 
    // System.out.println(contacts); // not needed - commented/deleted 
    for(Contact c : contacts) { 
     System.out.println(c); // prints each contact using the toString() implementation provided by you 
    } 
} 
1

我真的不明白問題是什麼。我不確定這個問題是否在一行中水平打印(儘管看起來你已經知道如何讓它在多行上打印),或者如果問題在於打印兩次,一次打印在一行上並一度在多個。

我會試着解釋它爲什麼會這樣做,也許這會幫助你。如果你能澄清問題是什麼,如果這不能解決你的問題,我相信我可以提供幫助。

所以,我不確定這是否是有意的,但第一類底部的if語句在其代碼塊中沒有任何內容。除非你把代碼放在裏面,否則沒有任何用處,如果你不打算這樣做,你可以繼續並刪除它。

if (answer == 2){ 
      } 
      System.out.println(contacts); 
      for(Contact c : contacts) { 
      System.out.println(c); 

正如你所看到的,它下面的大括號是阻止任何代碼被if語句執行。無論是否輸入1或2,所有代碼都將隨程序一起運行。如果您希望在輸入數字2時運行下面的一些代碼(或全部代碼),請將其放入大括號內。否則,您可以將其保留,並且無論選擇何種選項,它都會運行。

第一堂課結束時發生了兩件事。

System.out.println(contacts); 

這是告訴它在一行中打印整個數組列表。這就是爲什麼你得到所有聯繫人的水平線。

for(Contact c: contacts){ 
     System.out.println(c); 
    } 

這是告訴它通過arraylist循環,並打印每個單獨的聯繫人在其自己的單獨的行。這就是爲什麼你得到第二個輸出。請注意,在您的原始文章中,您在循環底部後錯過了一個花括號,我將其添加到了這篇文章中。

我希望能清除任何混淆。您應該能夠選擇是否要同時輸出這兩個輸出,或者如果您希望一個或兩個輸出僅在選擇選項2時才運行。再一次,我不確定問題是什麼,所以我試圖給出一個代碼在做什麼的概述。我很抱歉,這篇文章太冗長了。顯然,其他人的回答在使用更少的文本方面做得更好。祝你的代碼好運!