1

単純なリンクリスト収集プログラムを試していますが、出力されません。
私はこのようなものを作成しました

import java.lang.*;  
import java.util.*;  

class Linkedlist  
{  
    public static void main (String [] args)  
    {  
        LinkedList ll=new LinkedList ();  
        System.out.println ("CONTENTS OF l1 = "+ll);  
        System.out.println ("SIZE = "+ll.size ());  
        ll.add (new Integer (10));  
        ll.add (new Integer (20));  
        ll.add (new Integer (30));  
        ll.add (new Integer (40));  
        System.out.println ("CONTENTS OF ll = "+ll);  
        System.out.println ("SIZE = "+ll.size ());

        // retrieving data of ll using toArray ()  
        Object obj []=ll.toArray ();  
        int s=0;  

        for (int i=0; i<obj.length; i++)  
        {  
            Integer io= (Integer) obj [i];  
            int x=io.intValue ();  
            s=s+x;  
        }  

        System.out.println ("SUM USING toArray () = "+s);  
        ll.addFirst (new Integer (5));  
        ll.addFirst (new Integer (6));  
        System.out.println ("CONTENTS OF ll = "+ll);  
        System.out.println ("SIZE = "+ll.size ());  

        // retrieving data of ll using iterator ()  
        Iterator itr=ll.iterator ();  
        int s1=0;  

        while (itr.hasNext ())  
        {  
            Object obj1=itr.next ();  
            Integer io1= (Integer) obj1;  
            int x1=io1.intValue ();  
            s1=s1+x1;  
        }

        System.out.println ("SUM USING iterator () = "+s1);  
        ListIterator litr=ll.listIterator (); 

        while (litr.hasNext ())  
        {  
            Object obj2=litr.next ();  
            System.out.print (obj2+",");  
        } 

        System.out.println ("\n");  

        while (litr.hasPrevious ())  
        {  
            Object obj3=litr.next ();  
            System.out.print (obj3+",");  
        }

        System.out.println ("\n");  
        Object obj4=ll.get (2);// random retrieval  
        System.out.println (obj4);  
    }  
}

出力は

Note: Linkedlist.java uses unchecked or unsafe operations.  
Note: Recompile with -Xlint:unchecked for details.  
4

3 に答える 3

2

私は日食を通してあなたのプログラムを実行しました:

LinkedList<Integer>LinkedListの代わりに使用してください。警告なし。

出力=>

CONTENTS OF l1 = []
SIZE = 0
CONTENTS OF ll = [10, 20, 30, 40]
SIZE = 4
SUM USING toArray () = 100
CONTENTS OF ll = [6, 5, 10, 20, 30, 40]
SIZE = 6
SUM USING iterator () = 111
6,5,10,20,30,40,

Exception in thread "main" java.util.NoSuchElementException
    at java.util.LinkedList$ListItr.next(Unknown Source)
    at com.Linkedlist.main(Test.java:46)
于 2012-07-06T06:56:23.763 に答える
1

使用する

LinkedList<Integer> ll = new LinkedList<Integer>();
Iterator<Integer> itr = ll.iterator();
ListIterator<Integer> litr = ll.listIterator();

の挿入

LinkedList ll = new LinkedList();
Iterator itr = ll.iterator();
ListIterator litr = ll.listIterator();

以下に示すように

    LinkedList<Integer> ll = new LinkedList<Integer>();
    System.out.println("CONTENTS OF l1 = " + ll);
    System.out.println("SIZE = " + ll.size());
    ll.add(new Integer(10));
    ll.add(new Integer(20));
    ll.add(new Integer(30));
    ll.add(new Integer(40));
    System.out.println("CONTENTS OF ll = " + ll);
    System.out.println("SIZE = " + ll.size());
    // retrieving data of ll using toArray ()
    Object obj[] = ll.toArray();
    int s = 0;
    for (int i = 0; i < obj.length; i++) {
        Integer io = (Integer) obj[i];
        int x = io.intValue();
        s = s + x;
    }
    System.out.println("SUM USING toArray () = " + s);
    ll.addFirst(new Integer(5));
    ll.addFirst(new Integer(6));
    System.out.println("CONTENTS OF ll = " + ll);
    System.out.println("SIZE = " + ll.size());
    // retrieving data of ll using iterator ()
    Iterator<Integer> itr = ll.iterator();
    int s1 = 0;
    while (itr.hasNext()) {
        Object obj1 = itr.next();
        Integer io1 = (Integer) obj1;
        int x1 = io1.intValue();
        s1 = s1 + x1;
    }
    System.out.println("SUM USING iterator () = " + s1);
    ListIterator<Integer> litr = ll.listIterator();
    while (litr.hasNext()) {
        Object obj2 = litr.next();
        System.out.print(obj2 + ",");
    }
    System.out.println("\n");
    while (litr.hasNext()) {
        Object obj3 = litr.next();
        System.out.print(obj3 + ",");
    }
    System.out.println("\n");
    Object obj4 = ll.get(2);// random retrieval
    System.out.println(obj4);
于 2012-07-06T07:07:42.213 に答える
0

(Nandkumarによる)最初の答えは正しいです。次の行によって引き起こされるランタイムエラーも確認します。

while (litr.hasPrevious ())  
    {  
        Object obj3=litr.next ();  
        System.out.print (obj3+",");  
    }

つまり、イテレータに「前の」アイテムがあるかどうかを確認してから、「次の」アイテムに移動しますか?おそらくあなたが意図したことではないでしょう。

コンパイル時の「エラー」は単なる警告であり、コンパイル後にプログラムを実行できますが、コンパイラはコードに何か奇妙なものが見つかったと通知します。

于 2012-07-06T07:05:25.517 に答える