簡體   English   中英

Java ArrayList輸出錯誤

[英]Java ArrayList Output Error

在此程序中,我得到的ArrayList輸出不正確。 在第一行中,它始終水平打印ArrayList的每個元素。 然后,它將正確打印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", "pmcgee123@gmail.com"));
        contacts.add(new Contact("John Appleseed", "142-555-6740", "jappleseed99@gmail.com"));
        contacts.add(new Contact("Matt Jordan", "213-555-2323", "mjordan23@gmail.com"));
        contacts.add(new Contact("Kanye East", "255-434-9909", "keast123@gmail.com"));
        contacts.add(new Contact("Derrick Flower", "144-555-1111", "dflower1@gmail.com"));

           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);

第2類:

 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;

}

輸出:

[聯系方式[Patrick McGee,334-555-8860,pmcgee123 @ gmail.com],聯系方式[John Appleseed,142-555-6740,jappleseed99 @ gmail.com],聯系方式[馬特·喬丹,213-555-2323,mjordan23 @ gmail.com],聯系方式[Kanye East,255-434-9909,keast123 @ gmail.com],聯系方式[Derrick Flower,144-555-1111,dflower1 @ gmail.com]
(全部在一行中)。

然后打印:
聯系人[Patrick McGee,334-555-8860,pmcgee123 @ gmail.com]
聯系[John Appleseed,142-555-6740,jappleseed99 @ gmail.com] ...依此類推。

有什么想法可以解決嗎?

謝謝 :)

輸出

[聯系方式[Patrick McGee,334-555-8860,pmcgee123 @ gmail.com],聯系方式[John Appleseed,142-555-6740,jappleseed99 @ gmail.com],聯系方式[馬特·喬丹,213-555-2323,mjordan23 @ gmail.com],聯系方式[Kanye East,255-434-9909,keast123 @ gmail.com],聯系方式[Derrick Flower,144-555-1111,dflower1 @ gmail.com]

是由於

System.out.println(contacts);

這將打印ArrayList contactsString表示形式(通過toString()方法toString()

編輯

要不獲取此輸出,只需刪除該行。 for打印每個Contact看起來不錯:

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

您有一個額外的sysout語句,它正在打印額外的值。 System.out.println(contacts); 打印數組列表的所有元素(一行中的所有聯系人)。

[聯系方式[Patrick McGee,334-555-8860,pmcgee123 @ gmail.com],聯系方式[John Appleseed,142-555-6740,jappleseed99 @ gmail.com],聯系方式[馬特·喬丹,213-555-2323,mjordan23 @ gmail.com],聯系方式[Kanye East,255-434-9909,keast123 @ gmail.com],聯系方式[Derrick Flower,144-555-1111,dflower1 @ gmail.com]

我猜您只是想打印純文本“聯系人”,然后像這樣打印每個聯系人。

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
    }
}

我真的不明白問題是什么。 我不確定問題是否是在一行中水平打印(盡管您似乎已經弄清楚了如何使其在多行中打印),還是問題在於它是兩次打印,一次才打印一次並且一次多次。

我將嘗試解釋為什么會這樣做,也許會幫到您。 如果您能弄清問題所在,如果不能解決您的問題,我可以幫助您。

因此,我不確定這是否是有意的,但是第一類底部的if語句在其代碼塊內沒有任何內容。 除非將代碼放入其中,否則它沒有任何目的。如果您不打算這樣做,則可以繼續刪除它。

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

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

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

System.out.println(contacts);

這告訴它在一行中打印整個arraylist。 這就是為什么您獲得所有聯系人的水平線的原因。

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

這告訴它循環遍歷arraylist並將每個單獨的聯系人打印在其自己的單獨行上。 這就是為什么您獲得第二個輸出的原因。 請注意,在您的原始帖子中,在for循環的底部之后缺少大括號,我在此帖子中添加了它。

我希望這能消除任何混亂。 您應該能夠選擇是否要同時使用這兩個輸出,或者只選擇選項2時才要運行其中一個或兩個。 再次,我不太確定問題出在哪里,所以我只想概述一下代碼在做什么。 抱歉,這篇文章過長。 顯然,其他要回答的人在使用較少的文本方面做得更好。 祝您的代碼好運!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM