0

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

$

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

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

4

3 回答 3

2

每当您想添加或删除朋友而不是作用于类的 ArrayList 时,您都在创建一个新的 ArrayList。做后者而不是前者。换句话说,给你的班级一个ArrayList<Friend>变量,并在该数组列表上添加和删除你的朋友。

于 2012-04-11T02:00:52.547 回答
1

您需要了解局部变量的生命范围是什么,显然您在这里需要一个成员变量。仅供参考:成员变量和局部变量有什么区别?

于 2012-04-11T02:08:19.707 回答
0

ArrayList<Friend>每次调用 Add、Remove 或 Display 时,您都会创建一个新的。您需要将列表保存为类级字段。

如果您删除所有静态方法并将它们全部设为实例级别,那也是最好的。然后,您的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);
}

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

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

编辑

您当前的代码正在尝试String从您的List<Friends>. 它没有删除任何东西,String因为List. 您将不得不遍历列表并找到Friend其名称name

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

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 friendToRemove = null;
  for (Friends friend : friends) {
    if (name.equals(friend.getName()) {
      friendToRemove = friend;
    }
  } 

  if (friendToRemove != null) {
    friends.remove(friendToRemove)
  }

}//End RemoveFriend
于 2012-04-11T02:01:04.193 回答