我需要为我的类项目创建一个ArrayList

时间:2012-04-11 01:55:04

标签: java arrays

我已经写了我能做的事情并且已经达到了一个我无法弄清楚它为什么不保存数据的地步。下面是文件测试,然后是文件,以及我制作的数组文件。请帮忙......

$

import java.util.Scanner;

public class FriendsListTest

{

public static void main( String[] args)
{
    FriendsList friendsList = new FriendsList();

    char selection;
    Scanner input = new Scanner( System.in );
    do
        {
            //display menu
            System.out.println("\n--------------");
            System.out.println("Main Menu\n");
            System.out.println("1. Add a friend ");
            System.out.println("2. Delete a friend ");
            System.out.println("3. Show List ");
            System.out.println("4. Exit");

            //selection results
            selection = input.next().charAt(0);

            switch(selection){
            case '1':
                FriendsList.AddFriends();
                break;
            case '2':
                FriendsList.RemoveFriend();
                break;
            case '3':
                FriendsList.DisplayArray();     
                break;
            case '4':
                break;
            default:
                System.out.println("Invalid Selection");
        }//end Switch   

}while( selection != 4);//end do

}//end main

}//end FriendsListTest

$ $

import java.util.Scanner;
import java.util.ArrayList;

public class FriendsList
{

public static void AddFriends()
{
    Scanner input = new Scanner( System.in );
    ArrayList<Friends> friend = new ArrayList<Friends>(20);

    System.out.println("\n--------------");
    System.out.println("Please enter Name");
    String name = input.nextLine(); //reads name
    System.out.println("Please enter Age");
    int Age = input.nextInt();
    friend.add(new Friends( Age, name));

}//end AddFriends
public static void RemoveFriend()
{
    ArrayList<Friends> friend = new ArrayList<Friends>(20);
    Scanner input = new Scanner( System.in );

    System.out.println("\n--------------");
    System.out.println("Please enter Name of person you wish you remove");
    String name = input.nextLine();
    friend.remove(name);

}//End RemoveFriend
public static void DisplayArray()
{
    ArrayList<Friends> friend = new ArrayList<Friends>(20);
    System.out.print(friend);

}//end DisplayArray

 }//end class FriendsList

$ $

 class Friends
 {
    private String nName;
    private int nAge;
    public Friends(int Age, String name)
{
    nName = name;
    nAge = Age;
}
public String getName()
{
    return nName;
}
public int getAge()
{
    return nAge;
}
}//end class person

好的,在你的建议后,我能够存储数据,但现在我有删除数据的问题。删除数据时不会抛出任何错误,但数据仍然存在。如果你使用我所做的编辑,我会重新发布该程序。

3 个答案:

答案 0 :(得分:2)

每当您想要添加或删除朋友而不是代理该类的ArrayList时,您就会创建一个新的ArrayList。做后者请不要前者。换句话说,为您的班级提供一个ArrayList<Friend>变量,并在该数组列表中添加您的朋友添加和删除。

答案 1 :(得分:1)

你需要了解局部变量的生命范围,显然你需要一个成员变量。仅供参考:What is the difference between a member variable and a local variable?

答案 2 :(得分:0)

每次调用“添加”,“删除”或“显示”时,您都会创建一个新的ArrayList<Friend>。您需要将列表保存为类级别字段。

如果你拿走所有的静态方法并使它们都是实例级别,那也是最好的。然后,您的FriendList实例将与特定的朋友列表相关联。

例如:

public class FriendsList
{

private List<Friend> friends = new ArrayList<Friend>();

public void addFriends()
{
    Scanner input = new Scanner( System.in );

    System.out.println("\n--------------");
    System.out.println("Please enter Name");
    String name = input.nextLine(); //reads name
    System.out.println("Please enter Age");
    int Age = input.nextInt();
    friends.add(new Friends( Age, name));

}//end AddFriends
public void removeFriend()
{
    Scanner input = new Scanner( System.in );

    System.out.println("\n--------------");
    System.out.println("Please enter Name of person you wish you remove");
    String name = input.nextLine();
    friends.remove(name);

}//End RemoveFriend
public void displayArray()
{
    System.out.print(friends);
}

这意味着您需要在main方法中实际使用friendList实例变量,而不是以静态方式调用这些方法(即使用friendsList.addFriends()而不是FriendList.addFriends())< / p>

另外,请注意我将方法的第一个字母设为小写。这几乎是Java的标准。

修改

您当前的代码正在尝试从String中移除List<Friends>。它没有删除任何内容,因为String中没有List个元素。您将不得不遍历列表并找到名称为Friend的{​​{1}}

所以你的删除方法应该是这样的:

name