如何在Java中从单独的类中找到ArrayList的大小?
我正在为家庭作业创建一个非常简单的电话簿,但我被卡住了。我尝试过寻找类似的线索,虽然这些线索很有用,但它们并没有回答我的问题。我有一个类名目录,其中有一个ArrayList,它是从另一个名为Person的类编译而来的。Person类收集有关联系人的信息:所有联系人的姓名、电话号码和电子邮件地址。我正在尝试从另一个类读取ArrayList大小:\u main menu,以便如果我想添加另一个联系人,addNewPerson方法可以是动态的。我将包括主菜单和目录的代码。基本上,我试图避免手动为类Person创建新对象,因为我不知道用户将拥有多少联系人。我希望这是有道理的。。。对不起,如果没有。毫无疑问,我将试图澄清问题如何在Java中从单独的类中找到ArrayList的大小?,java,arraylist,Java,Arraylist,我正在为家庭作业创建一个非常简单的电话簿,但我被卡住了。我尝试过寻找类似的线索,虽然这些线索很有用,但它们并没有回答我的问题。我有一个类名目录,其中有一个ArrayList,它是从另一个名为Person的类编译而来的。Person类收集有关联系人的信息:所有联系人的姓名、电话号码和电子邮件地址。我正在尝试从另一个类读取ArrayList大小:\u main menu,以便如果我想添加另一个联系人,addNewPerson方法可以是动态的。我将包括主菜单和目录的代码。基本上,我试图避免手动为类Pe
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();
}
}
import java.util.Scanner;
公共类\u主菜单{
公共静态扫描仪输入=新扫描仪(System.in);
公共选择;
公共静态字符串firstName=新字符串();
公共静态字符串lastName=“”;
公共静态字符串电话号码;
公共静态字符串地址;
公共静态人员pI=新人员();
公共静态void main(字符串[]args)引发异常
{
目录d1=新目录(“myDir.txt”);
做
{
打印菜单();
选择子菜单();
如果(选项==1)
{
对于(int i=0;i
下面是类目录的代码:
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();
}
}
import java.util.ArrayList;
导入java.util.Formatter;
导入java.io.File;
导入java.util.Scanner;
公共类目录{
private ArrayList directory=new ArrayList();
公用目录(字符串名称)引发异常
{
文件f=新文件(名称);
扫描仪输入;
如果(f.exists())
{
输入=新扫描仪(f);
while(input.hasNext())
{
人员p=新人员();
p、 setFname(input.next());
p、 setLname(input.next());
int pNumber=input.nextInt();
对于(int i=0;i 对于(inti=0;i您必须为每个条目创建一个新的Person对象
Person p = new Person();
p.firstname = ...
p.lastname = ..
d1.addNewPerson(p);
要获取ArrayList的大小,您可以尝试d1.directory.size()
,因为director是一个公共字段。但如果可能,您应该将其设置为私有,并向directory添加一个方法
public int getSize()
{
return directory.size();
}
编辑:
您可以将代码修改为以下内容
if(choice == 1)
{
Person p = new Person();
p.firstname = ...
p.lastname = ..
d1.addNewPerson(pI);
}
好的。但我不知道需要多少Person对象,因为这取决于用户。@Michael您不必事先知道它,因为您使用的是ArrayList。您可以继续向其中添加Person对象,ArrayList负责调整大小。请参阅我的编辑谢谢您进行最终编辑。这很有帮助,只是w我需要什么我不明白ArrayList能处理的。