[英]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 contacts
的String
表示形式(通過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.