Java ArrayList输出错误

Java ArrayList输出错误,java,arraylist,output,Java,Arraylist,Output,在这个程序中,ArrayList的输出不正确。 在第一行中,它始终水平打印ArrayList的每个元素。 然后它将正确打印ArrayList。 有人能看一下代码,看看我是否做错了什么吗?我将给你看这两门课 第1类: public class contactDriver { public static void main (String[] args) { Scanner scan = new Scanner(System

在这个程序中,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);
输出:

[联系人[Patrick McGee,334-555-8860,pmcgee123@gmail.com],联系[John Appleseed,142-555-6740,jappleseed99@gmail.com],联系[Matt Jordan,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],联系[Matt Jordan,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的方法打印字符串表示形式

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

要不获取此输出,只需删除该行。用于打印每个联系人的选项看起来很好:

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

您有一个额外的sysout语句,它正在打印额外的值。System.out.printlncontacts;在一行中打印数组listAll contacts的所有元素

[联系人[Patrick McGee,334-555-8860,pmcgee123@gmail.com],联系[John Appleseed,142-555-6740,jappleseed99@gmail.com],联系[Matt Jordan,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时才运行其中一个或两个输出。同样,我也不确定问题出在哪里,所以我尝试只给出代码执行情况的概述。很抱歉,这篇文章太长了。显然,其他人答疑在使用更少的文本方面做得更好。祝你的代码好运!

你的预期输出是什么?谢谢。我应该如何更改它来解决这个问题?哦,我完全错过了!xD谢谢大家!