Java地址簿

Java地址簿,java,arrays,oop,Java,Arrays,Oop,我必须用java创建一个地址簿。我被困在一个地方。当我添加第二个地址时,它会使第一个地址为空。我已经评论了一些我还没有评论过的地方,所以忽略这些地方。我不知道为什么第一个地址变成空 import java.util.Scanner; import java.io.IOException; import java.io.File; import java.io.FileWriter; import java.io.FileNotFoundException; class Program2 {

我必须用java创建一个地址簿。我被困在一个地方。当我添加第二个地址时,它会使第一个地址为空。我已经评论了一些我还没有评论过的地方,所以忽略这些地方。我不知道为什么第一个地址变成空

import java.util.Scanner;
import java.io.IOException;
import java.io.File;
import java.io.FileWriter;
import java.io.FileNotFoundException;

class Program2 {

    static Scanner s = new Scanner(System.in);

    public static void main(String[] args) {

        System.out.println("\nWelcome. Address book is loaded.");
        loop: while(true) {
            displayOptions();
            int choice = s.nextInt();
            switch(choice) {
                case 1:
                    System.out.println("**Choice 1**");
                    AddressBook.display();
                    break;

                case 2:
                    System.out.println("**Choice 2**");
                    System.out.print("First Name: ");
                    String firstName = s.next();
                    System.out.print("Last Name: ");
                    String lastName = s.next();
                    System.out.print("Phone Number: ");
                    String phone = s.next();
                    Contact test = new Contact(firstName, lastName, phone);
                    AddressBook.add(test);
                    break;

                case 3:
                    System.out.println("**Choice 3**");
                    break;          

                case 4:
                    System.out.println("**Choice 4**");
                    break;

                case 5:
                    break loop;
            }
        }
        System.out.println("\nAddress book is saved to file.\n");
        System.out.println("Good bye.\n");
        System.exit(0);

    }

    private static void displayOptions() {
        System.out.println("\nWhat would you like to do?");
        System.out.println("  1) Display all contacts\n" + 
                   "  2) Add a contact\n" +
                   "  3) Remove a contact\n" +
                   "  4) Search a contact\n" +
                   "  5) Exit");
        System.out.print("Your choice: ");
    }

}

class Contact {

    private String firstName;
    private String lastName;
    private String phone;

    public Contact(String firstName, String lastName, String phone) {
        this.firstName = firstName;
        this.lastName = lastName;
        this.phone = phone;
    }

    public String getFirstName() {return firstName;}
    public String getLastName() {return lastName;}
    public String getPhone() {return phone;}

    public void setFirstName(String firstName) {this.firstName = firstName;}
    public void setLastName(String lastName) {this.lastName = lastName;}
    public void setPhone(String phone) {this.phone = phone;}

    /*public boolean equals(Object o) { 
        if (o instanceof Contact) {
            Contact contacts = (Contact) o;
            return (firstName.equals(contacts.getFirstName()) && 
                lastName.equals(contacts.getLastName()));
        }
        return false;
    }*/

    public String toString() { 
        return firstName + " " + lastName + "\t\t" + phone;
    }

}

class AddressBook {

    public final static int CAPACITY = 100;
    static private Contact[] contacts;
    static private int count = 0;
    static private String addressFile = "address.txt";
    static File file = new File(addressFile);

    public AddressBook(String addressFile) {
        this.addressFile = addressFile;
    }

    public static boolean add(Contact c) {
        contacts = new Contact[CAPACITY];
        if (count < CAPACITY) {
            contacts[count++] = c;
        }
        return false;
    }

    //public boolean remove(fullname) { }

    //public Contact search(fullname) { }

    public static void display() { 
        System.out.println("Name\t\t\tPhone Number");
        System.out.println("-------------------------------------");
        for (int i=0; i<count; i++) {
            System.out.println(contacts[i]);
        }
        System.out.println("-------------------------------------");
    }

    /*public boolean load() { 

        try {
        Scanner sF = new Scanner(file);
        while (s.hasNext()) {
            String line = s.nextLine();
            System.out.println(line);
        }
        s.close();

        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }   
    }

    /*public boolean save() { 
        try {
            FileWriter writer = new FileWriter(addressFile);
            writer.write();
            writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }*/

    //public boolean contains(String firstName, String lastName) { 
    //  return this.contacts.contains(firstName, lastName);
    //}

}
import java.util.Scanner;
导入java.io.IOException;
导入java.io.File;
导入java.io.FileWriter;
导入java.io.FileNotFoundException;
班级计划2{
静态扫描仪s=新扫描仪(System.in);
公共静态void main(字符串[]args){
System.out.println(“\n加载了elcome.Address book”);
循环:while(true){
显示选项();
int choice=s.nextInt();
开关(选择){
案例1:
System.out.println(“**选项1**”);
AddressBook.display();
打破
案例2:
System.out.println(“**选项2**”);
系统输出打印(“名字:”);
字符串firstName=s.next();
系统输出打印(“姓氏:”);
字符串lastName=s.next();
系统输出打印(“电话号码:”);
字符串phone=s.next();
联系人测试=新联系人(名字、姓氏、电话);
地址簿。添加(测试);
打破
案例3:
System.out.println(“**选项3**”);
打破
案例4:
System.out.println(“**选项4**”);
打破
案例5:
断环;
}
}
System.out.println(“\n服装手册已保存到文件。\n”);
System.out.println(“再见”。\n”);
系统出口(0);
}
私有静态void显示选项(){
System.out.println(“\n您想做什么?”);
System.out.println(“1)显示所有联系人\n”+
“2)添加联系人\n”+
“3)删除联系人\n”+
“4)搜索联系人\n”+
“5)退出”);
System.out.print(“您的选择:”);
}
}
班级联系{
私有字符串名;
私有字符串lastName;
私人电话;
公共联系人(String firstName、String lastName、String phone){
this.firstName=firstName;
this.lastName=lastName;
this.phone=电话;
}
公共字符串getFirstName(){return firstName;}
公共字符串getLastName(){return lastName;}
公共字符串getPhone(){return phone;}
public void setFirstName(字符串firstName){this.firstName=firstName;}
public void setLastName(字符串lastName){this.lastName=lastName;}
public void setPhone(字符串电话){this.phone=phone;}
/*公共布尔等于(对象o){
如果(o触点实例){
触点=(触点)o;
return(firstName.equals(contacts.getFirstName())&&
等于(contacts.getLastName());
}
返回false;
}*/
公共字符串toString(){
返回firstName+“”+lastName+“\t\t”+电话;
}
}
类通讯簿{
公共最终静态int容量=100;
静态私人联系人[]联系人;
静态私有整数计数=0;
静态私有字符串addressFile=“address.txt”;
静态文件文件=新文件(addressFile);
公共通讯簿(字符串地址文件){
this.addressFile=addressFile;
}
公共静态布尔添加(联系c){
触点=新触点[容量];
如果(计数<容量){
触点[count++]=c;
}
返回false;
}
//公共布尔删除(全名){}
//公共联系人搜索(全名){}
公共静态void display(){
System.out.println(“名称\t\t\t电话号码”);
System.out.println(“-----------------------------------------”;

对于(int i=0;i您的
add
方法会覆盖
contacts
数组,因此每次调用该数组时,对以前的
Contact
的引用都会丢失:

public static boolean add(Contact c) {
    contacts = new Contact[CAPACITY]; // remove this line
    if (count < CAPACITY) {
        contacts[count++] = c;
    }
    return false;
}

您的
add
方法会覆盖
contacts
数组,因此每次调用该数组时,对上一个
Contact
的引用都会丢失:

public static boolean add(Contact c) {
    contacts = new Contact[CAPACITY]; // remove this line
    if (count < CAPACITY) {
        contacts[count++] = c;
    }
    return false;
}

哇,我错过了这么简单的东西。谢谢!哇,我错过了这么简单的东西。谢谢!