簡體   English   中英

在 Java 中打印 ArrayList 時出現問題

[英]Problems printing ArrayList in Java

我必須制作電話簿進行練習,我需要使用 ArrayList 來完成,我在菜單中添加了注冊用戶的選項,但是在打印這些用戶時,它給了我類似的信息: [Contact@68e09d7b, Contact@51da2082]

我在 Stack Overflow 上進行了研究,看到了和我有類似問題的人,在答案中,人們告訴他們在主 class 中使用Override toString() 方法,但是當我嘗試這樣做時,我的代碼返回了兩個列表在一個列表中。

Output:

[Jon, 99999-9999, jon@gmail.com, 01/01/2000, Tom, 99999-9998, tom@gmail.com, 02/01/2000]

預期的:

[Jon, 99999-9999, jon@gmail.com, 01/01/2000]
[Tom, 99999-9998, tom@gmail.com, 02/01/2000]

這是我用來制作程序的兩個類。

聯系方式.class

public class Contato {
  // Atributos da classe Contato
  private String id;
  private String nome;
  private String telefone;
  private String email;  
  private String aniversario;
  
  public String getID() {
    return id;
  }
  public void setID(String id) {
    this.id = id;
  }
  
  public String getNome() {
    return nome;
  }
  public void setNome(String nome) {
    this.nome = nome;
  }
  
  public String getTelefone() {
    return telefone;
  }
  public void setTelefone(String telefone) {
    this.telefone = telefone;
  }
  
  public String getEmail() {
    return email;
  }
  public void setEmail(String email) {
    this.email = email;
  }

  public String getAniversario() {
    return aniversario;
  }
  public void setAniversario(String aniversario) {
    this.aniversario = aniversario;
  }
  
  public Contato(String nome, String telefone) {
    this.id = id;
    this.nome = nome;
    this.telefone = telefone;
    this.email = "Email not entered";
    this.aniversario = "Birthday date not entered";
  }
  
   @Override
   public String toString() {
     return nome + ", " + telefone + ", " + email + ", " + aniversario;
  }
}

主.class

import java.util.Scanner;
import java.util.ArrayList;
import java.util.Arrays;
 
public class Main{
  public static void main(String args[]){
    Scanner entrada = new Scanner(System.in);
    String id, nome, telefone, email, aniversario;
    ArrayList<Contato> contatos = new ArrayList<>();
     
    Agenda agenda = new Agenda();
     
    while(true){
      System.out.println("\n1. Register New Contact");
      System.out.println("2. Search Contact");
      System.out.println("3. Delete Contact");
      System.out.println("4. Exit");
      System.out.print("Your choice: ");
      int opcao = Integer.parseInt(entrada.nextLine());
       
      switch(opcao){
        case 1:
          System.out.print("Name: ");
          nome = entrada.nextLine();
          System.out.print("Phone number: ");
          telefone = entrada.nextLine();
          Contato novoContato = new Contato(nome, telefone);
          System.out.print("E-mail: ");
          email = entrada.nextLine();
          novoContato.setEmail(email);
          System.out.print("Birthday date: ");
          aniversario = entrada.nextLine();
          novoContato.setAniversario(aniversario);

          contatos.add(novoContato);
          break;
        case 2:
          System.out.println(contatos);
          break;
      }
    }
  }
} 

不要嘗試打印列表,而是分別依次打印每個聯系人

for (Contato contato : contatos) {
    System.out.println("[" + contato + "]");
}

你也可以使用類似StringJoiner的東西,例如......

StringJoiner sj = new StringJoiner("\n");
for (Contato contato : contatos) {
    sj.add(contato.toString());
}
System.out.println(sj);

雖然,為了性能,我可能會堅持只循環列表

暫無
暫無

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

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