2012-07-06 13 views
1

我正在尝试简单的链接列表收集程序,但它并没有给我出来。
我创造了这个东西试图通过Java实现LinkedList的概念,但它在编译时给出错误?

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. 
+1

而* *没你重新编译'-Xlint:unchecked'的细节?顺便说一下,你应该格式化你的代码。目前无法读取。另外,我没有看到链表的实际实现 - 只是一个'main'方法...在一个名为'Linkedlist'的类中使用*'LinkedList'。这真是**可怕的命名... – 2012-07-06 06:49:42

+1

这是来自*编译器*('javac Linkedlist.java')的输出。你是否还运行过你的程序('java Linkedlist')? – Thilo 2012-07-06 06:50:53

+0

使用链表,而不是仅仅LinkedList的 – 2012-07-06 06:52:23

回答

2

我通过月食执行程序:

只需使用LinkedList<Integer>而不只是链表的。没有警告。

输出=>

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) 
+0

R的引发异常ü确保ü成功运行它...它抛出一个异常 而(litr.hasPrevious()){ 对象 = OBJ 3 litr。下一个 (); System.out.print(obj3 +“,”); };是错的 – 2012-07-06 07:04:54

+0

@PramodKumar:是的!我发布了一个例外输出。那么当他以相反的顺序打印列表时他错误的代码。让他弄清楚。 – 2012-07-06 07:06:22

+0

异常在线程 “主要” java.lang.NoClassDefFoundError:在java.net.URLClassLoader的$ 1.run(URLClassLoader.java:217) \t在Linkedlist.java \t:链表/ JAVA 引起:抛出java.lang.ClassNotFoundException java.security.AccessController.doPrivileged(本机方法) \t在java.net.URLClassLoader.findClass(URLClassLoader.java:205) \t在java.lang.ClassLoader.loadClass(ClassLoader.java:321) \t在阳光下。 misc.Launcher $ AppClassLoader.loadClass(Launcher.java:294) \t at java.lang.ClassLoader.loadClass(ClassLoader。java:266) 找不到主类:Linkedlist.java。程序将会退出。 – 2012-07-06 07:14:44

0

第一个答案(由Nandkumar)是正确的,我还检查运行时错误,造成该行:

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

那就是:你检查如果你的迭代器有一个“前一个”项目,然后去“下一个”?可能不是你打算做的。

编译时的“错误”只是一个警告,你可以在编译后运行你的程序,但是编译器告诉你它在你的代码中发现了一些奇怪的东西。

+0

得到了异常 java -classpath。 Linkedlist.java 异常在线程 “主要” java.lang.NoClassDefFoundError:在java.net.URLClassLoader的$ 1.run Linkedlist.java \t(URLClassLoader.java:217:LinkedList的/ JAVA 引起:抛出java.lang.ClassNotFoundException ) \t at java.security.AccessController.doPrivileged(Native Method)at找不到主类:Linkedlist.java。程序将会退出。 – 2012-07-06 07:27:54

+0

您无法在虚拟机中运行.java文件,您需要指定类名称(不带扩展名)。 – 2012-07-06 14:42:49

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(); 

insted的如下图所示

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);