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つまり、これらのメソッドを静的な方法で呼び出すのではなく、インスタンス変数をメイン メソッドで実際に使用する必要があることを意味します(つまり、friendsList.addFriends()の代わりに使用しますFriendList.addFriends()) 。

また、メソッドの最初の文字を小文字にしたことに注意してください。これは Java のほぼ標準です。

編集

現在のコードは、から a を削除しようとしていStringますList<Friends>Stringに要素がないため、何も削除されませんList。リストを反復処理して、Friend名前がname

したがって、 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
于 2012-04-11T02:01:04.193 に答える