4

コードに1つの問題があります。リンクリストから従業員の詳細を表示するサンプルプログラムを実行しました。特定のエントリを削除しようとしたときに問題が発生した場合、それが機能しないことを意味します。コードに誤りがあったことを願っています。その方法を提案してもらえますか?

import java.util.*;

class EmpDedup {
    int record;
    String fprint;
    int fid;

    EmpDedup(int record, String fprint, int fid) {
        this.record = record;
        this.fprint = fprint;
        this.fid = fid;
    }

    public int getRecord() {
        return record;
    }

    public String getFprint() {
        return fprint;
    }

    public int getFid() {
        return fid;
    }

    public static void main(String[] args) {
        int count = 0;
        LinkedList<EmpDedup> list = new LinkedList<EmpDedup>();
        list.add(new EmpDedup(101, "entry1", 20));
        list.add(new EmpDedup(102, "entry2", 30));
        list.add(new EmpDedup(103, "entry3", 40));
        list.add(new EmpDedup(104, "entry4", 50));

        Scanner input = new Scanner(System.in);
        System.out.print("Enter record no to display: ");
        int rec = input.nextInt();
        for (EmpDedup data : list) {
            if (data.getRecord() == rec) {
                System.out.println(data.getRecord() + "\t" + data.getFprint() + "\t" + data.getFid() + "\t");

                count++;

            }
        }
        System.out.println("The size of an linkedlist is: \t" + list.size());

        System.out.println("The number of  available record  is :" + count);

        System.out.println("The size of an linkedlist is: \t" + list.size());
        Scanner input1 = new Scanner(System.in);
        System.out.print("Enter record no to delete: ");// here i try to delete a particular record
        int rec1 = input1.nextInt();
        for (EmpDedup data : list) {
            if (data.getRecord() == rec1) {
                // System.out.println(data.getRecord()+"\t"+data.getFprint()+"\t"+data.getFid()+"\t");
                list.remove(data); // problem is here
                count++;

            }
        }
    }
}
4

7 に答える 7

15

リストを反復処理している間は、リストを操作(追加、削除...アイテム)することはできません。イテレータを使用する必要があります

for(Iterator<EmpDedup> iter = list.iterator(); iter.hasNext();) {
    EmpDedup data = iter.next();
    if (data.getRecord() == rec1) {
        iter.remove();
    }
}

http://docs.oracle.com/javase/6/docs/api/java/util/Iterator.htmlを参照してください

于 2012-05-24T10:13:33.883 に答える
7

Iterator代わりにを使用してからremove()Iterator

于 2012-05-24T10:07:23.827 に答える
6

これを行うとき:

list.remove(101);

このメソッドを呼び出していますが、これは目的を果たしません。

むしろ使用する必要があります:

list.remove(data);

于 2012-05-24T10:10:07.273 に答える
2

インデックス101の要素を削除しようとしましたが、リストに4つのアイテムしかありません。インデックス101の要素を削除するにはどうすればよいですか?

EmpDedup(101、 "entry1"、20)に等しい要素を削除する場合は、このオブジェクトをremoveメソッドに渡す必要があります。そして、EmpDedupのequalsとハッシュコードを再定義することを躊躇しないでください。

于 2012-05-24T10:12:48.487 に答える
2

コードはインデックス位置101の要素を削除しようとしますが、リストには4つの項目しかありません。

コードの代わりに以下を使用してください。

for( EmpDedup data : list)
{
   if( data.getRecord() == rec1 )
   {
        list.remove( data );     
         ++count;
    }
}

ここでリストオブジェクトが削除されます。

于 2012-05-24T10:28:10.687 に答える
1
for( EmpDedup data:list)
{
   if(data.getRecord()==rec1)
   {
        list.remove(data);     
         count++;

    }
 }
于 2012-05-24T10:16:22.050 に答える
0

java.util.Scannerをインポートします。

//単独で削除を示す完全に機能するJavaプログラム//リンクリストクラスLinkedList{ノードヘッド; //リストの先頭

/* Linked list Node*/
class Node
{
    int data;
    Node next;
    Node(int d)
    {
        data = d;
        next = null;
    }
}

/* Given a key, deletes the first occurrence of key in linked list */
void deleteNode(int key)
{
    // Store head node
    Node temp = head, prev = null;

    // If head node itself holds the key to be deleted
    if (temp != null && temp.data == key)
    {
        head = temp.next; // Changed head
        return;
    }

    // Search for the key to be deleted, keep track of the
    // previous node as we need to change temp.next
    while (temp != null && temp.data != key)
    {
        prev = temp;
        temp = temp.next;
    }    

    // If key was not present in linked list
    if (temp == null) return;

    // Unlink the node from linked list
    prev.next = temp.next;
}

/* Inserts a new Node at front of the list. */
public void push(int new_data)
{
    Node new_node = new Node(new_data);
    new_node.next = head;
    head = new_node;
}

/* This function prints contents of linked list starting from
    the given node */
public void printList()
{
    Node tnode = head;
    while (tnode != null)
    {
        System.out.print(tnode.data+" ");
        tnode = tnode.next;
    }
}

/* Drier program to test above functions. Ideally this function
should be in a separate user class. It is kept here to keep
code compact */
public static void main(String[] args)
{
    LinkedList llist = new LinkedList();

    llist.push(7);
    llist.push(1);
    llist.push(3);
    llist.push(2);

    System.out.println("\nCreated Linked list is:");
    llist.printList();

    Scanner sc = new Scanner(System.in);
    System.out.println("please enter input");
    int aa =sc.nextInt();
    llist.deleteNode(aa); // Delete node at position 4

    System.out.println("\nLinked List after Deletion at position :"+aa);


    llist.printList();

    System.out.println("adding element to the LinkedList");

    System.out.println("enter element");
    int dd = sc.nextInt();
    llist.push(dd);

    llist.printList();
}

}

于 2017-12-02T14:11:23.337 に答える