Как найти размер ArrayList из отдельного класса в Java? - PullRequest
1 голос
/ 14 апреля 2011

Я создаю очень простой телефонный справочник для домашнего задания, но я застрял.Я пробовал просматривать похожие темы, и хотя они были полезны, они не ответили на мой вопрос.У меня есть каталог имени класса, который имеет ArrayList, который скомпилирован из другого класса с именем Person.Класс Person собирает информацию о контакте: имя и фамилия, номер телефона и адреса электронной почты всех контактов.Я пытаюсь прочитать размер ArrayList из другого класса: _MainMenu, так что если я хочу добавить другой контакт, метод addNewPerson может быть динамическим.Я включу код для MainMenu и Directory.По сути, я стараюсь не создавать вручную новый объект для класса Person, потому что я не знаю, сколько контактов будет у пользователя.Я надеюсь, что это имеет смысл ... Извините, если это не так.Я постараюсь уточнить, как вопросы, несомненно, приходят.

import java.util.Scanner;

public class _MainMenu {
public static Scanner input = new Scanner(System.in);
public static int choice;
public static String firstName = new String();
public static String lastName = "";
public static String phoneNumbers;
public static String emailAddresses;
public static Person pI = new Person ();

public static void main(String[] args) throws Exception
{
    Directory d1 = new Directory("myDir.txt");
    do
    {
    printMenu();
    selectSubMenu();
    if(choice == 1)
    {
        for(int i = 0; i < d1.getSize(); i++)
        d1.addNewPerson(pI);
    }
    }while(choice != 3);
    d1.writeToFile("myDir.txt");
}

public static void printMenu()
{
    System.out.printf("%s\n%s\n%s\n%s\n",
            "Select The Number Of Your Choice: ",
            "1 - Add New Contact",
            "2 - Search (Display/Edit/Remove)",
            "3 - Exit");
}

public static void selectSubMenu()
{
    choice = input.nextInt();
    switch(choice)
    {
        case 1:
            addNewContact();
            break;
        case 2:
//              search();
            break;
        case 3:
            break;
        default:
            System.out.println("Invalid selection. Please try again.");
    }

}

public static void addNewContact()
{
    System.out.println("Please enter the first name: ");
    firstName = input.next();
    System.out.println("Please enter the last name: ");
    lastName = input.next();
    System.out.println("Please enter up to three phone numbers: ");
    phoneNumbers += input.next();
    System.out.println("Please enter up to three email addresses: ");
    emailAddresses += input.next();

}

}

А вот код для класса Directory:

import java.util.ArrayList;
import java.util.Formatter;
import java.io.File;
import java.util.Scanner;

public class Directory {

private ArrayList <Person> directory = new ArrayList <Person>();

public Directory(String name) throws Exception
{
    File f = new File(name);
    Scanner input;
    if(f.exists())
    {
        input = new Scanner (f);
        while(input.hasNext())
        {
            Person p = new Person();
            p.setFname(input.next());
            p.setLname(input.next());
            int pNumber = input.nextInt();
            for (int i=0; i< pNumber; i++)
                p.setPhone(input.next());
            int eNumber = input.nextInt();
            for (int i=0; i< eNumber; i++)
                p.setemail(input.next());
            directory.add(p);
        }
        input.close();
    }
    else
        f.createNewFile();
}
public Person find(String fName, String lName)
{
    for(int i=0; i<directory.size(); i++)
    {
        if (directory.get(i).getLname().equals(lName) && directory.get(i).getFname().equals(fName))
            return directory.get(i);
    }
    return null;
}

public void addNewPerson(Person p)
{
    directory.add(p);
}
public void writeToFile(String name) throws Exception
{
    Formatter inFile = new Formatter(name);
    for( int i =0; i< directory.size(); i++){
        inFile.format("%s %s %d ", directory.get(i).getFname(),directory.get(i).getLname(),directory.get(i).pNum);
        for(int j=0; j<directory.get(i).pNum; j++)
            inFile.format("%s ",directory.get(i).getPhones()[j]);
        inFile.format("%d ", directory.get(i).eNum);
        for(int j=0; j<directory.get(i).eNum; j++)
            inFile.format("%s ",directory.get(i).getemails()[j]);
    }
    inFile.close();
}
}

Я понимаю, что код в MainMenu внутри if (выбор== 1) утверждение не работает, но я не могу придумать, как это сделать.Я хочу, чтобы Person pI был динамической переменной, поэтому, если пользователь хочет добавить еще один контакт, он выбирает «Добавить контакт», и программа определяет, сколько контактов уже есть в каталоге ArrayList, и затем добавляет «1».введите эту новую переменную в d1.addNewPerson (pI), чтобы она работала примерно так:,В любом случае, если кто-то может понять это и знать, как работать с кодом, я был бы очень признателен.Спасибо.

1 Ответ

2 голосов
/ 15 апреля 2011

Вам нужно будет создать новый объект Person для каждой записи.

Person p = new Person();
p.firstname = ... 
p.lastname = ..

d1.addNewPerson(p);

и получить размер ArrayList, вы можете попробовать d1.directory.size(), так как Director - это открытое поле.Но если возможно, вы должны сделать его закрытым и добавить метод в каталог

public int getSize()
{
    return directory.size();
}

РЕДАКТИРОВАТЬ:

, вы можете изменить свой код на что-то вроде этого

if(choice == 1)
{
        Person p = new Person();
        p.firstname = ... 
        p.lastname = ..


        d1.addNewPerson(pI);
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...