如何从Java中的单独类中查找ArrayList的大小?
|
我正在为作业分配一个非常简单的电话目录,但我遇到了麻烦。我尝试通过类似的线程进行搜索,尽管这些线程很有用,但它们并没有回答我的问题。我有一个类名Directory,它具有从另一个名为Person的类编译的ArrayList。 Person类收集有关联系人的信息:所有联系人的名字和姓氏,电话号码和电子邮件地址。我正在尝试从另一个类_MainMenu读取ArrayList的大小,以便如果我想添加另一个联系人,则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();
}
}
我知道if(choice == 1)语句中MainMenu中的代码不起作用,但是我想不出该怎么做。我希望将Person pI作为动态变量,以便如果用户想要添加另一个联系人,则他选择\“ Add Contact \”,程序将在Directory ArrayList中已经有多少个联系人,并且它将添加\' 1 \“,然后将该新变量输入到\” d1.addNewPerson(pI)\“中,这样它的工作原理如下:\” d1.addNewPerson(d1.size()+ 1)\“ ...我不知道不知道其中任何一个是否合理。无论如何,如果有人可以理解它并知道如何使用代码,我将不胜感激。谢谢。
没有找到相关结果
已邀请:
1 个回复
摊揉售
并且要获取ArrayList的大小,您可以尝试
,因为Director是一个公共字段。但是,如果可能,您应该将其设为私有并向Directory添加方法
编辑: 您可以将代码修改为如下所示