【问题标题】:i need to create a ArrayList for my class project我需要为我的班级项目创建一个 ArrayList
【发布时间】:2012-04-23 08:11:36
【问题描述】:

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

$

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

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

【问题讨论】:

  • 重新标记...请注意,文本和代码之间的比率过高,无法得到有用的答案。考虑使样本更小,并提出更详细的问题。

标签: java arrays


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      如果你去掉所有的静态方法并把它们都变成实例级别,那也是最好的。然后您的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()

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

      编辑

      您当前的代码正在尝试从您的List&lt;Friends&gt; 中删除String。它不会删除任何内容,因为List 中没有String 元素。您将不得不遍历列表并找到名称为 nameFriend

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

      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
      

      【讨论】:

      • 您的建议很有帮助,从每种方法中删除数组实际上是我遇到的最大问题。在编辑了一些其他的东西之后,我能够得到它来存储数据。现在我的问题是删除数据。我似乎无法从程序中删除数据。
      • 再次感谢我真的很感激。我很高兴我能看到编码并理解它的含义.. 一个月前我会看到它并说出我在看什么。它真的很有帮助,我真的很感激。
      • @YamidE.Medina 没有问题。只要您需要帮助,请继续提出有关 SO 的问题。既然你已经完成了,你介意接受一个答案吗?
      猜你喜欢
      • 1970-01-01
      • 2016-06-03
      • 2011-02-20
      • 1970-01-01
      • 1970-01-01
      • 2021-05-10
      • 1970-01-01
      • 2015-03-19
      • 2020-06-02
      相关资源
      最近更新 更多