链接列表与字符串数据

时间:2014-12-18 16:58:26

标签: java

此代码适用于LinkedList进程。这个LinkedList与整数数据一起正常工作,但是当我尝试将String数据类型值作为linkedList的数据时,它在运行时会出错。请问,有些人可以解释一下,为什么它不使用String。预先感谢... for Node

package linked;
      public class Node{
int data;
Node link;
public Node(){
    data=0;
    link=null;
}
public Node(int i){
   data=i;
   link=null;
}
public void setData(int i){
   data=i;
}
public int getData(){
    return data;
}
public void setLink(Node n){
   link=n;
}
public Node getLink(){
   return link;
}

}

链表的代码

package linked;
  public class LinkedList{
Node start;
Node end;
int noE;
public LinkedList(){
    start=null;
    end=null;
    noE=0;
}
public void insertB(int i){
   Node n=new Node(i);
   noE++;
   if(start==null){
      start=n;
      end=n;
   }
   else{
      n.setLink(start);
      start=n;
   }
}
public void insertE(int i){
   Node n=new Node(i);
   noE++;
   if(start==null){
     start=n;
     end=n;
    }
    else{
       end.setLink(n);
       end=n;
    }
}
public void insertM(int d,int pos){
    Node n=new Node(d);
    noE++;
    int i=1;
    if(start==null){
       start=n;
       end=n;
       return;
    }

    Node curr=start;
    Node link=curr;
    while(i<pos){
       curr=link;
       link=curr.getLink();
       i++;
    }
    curr.setLink(n);
    n.setLink(link);

}

public boolean isEmpty(){
    if(start==null)
       return true;
    else
       return false;
}

public void deleteB(){
    if(isEmpty()){
        System.out.println("empty linked list");
        return;
    }
    start=start.getLink();
    noE--;

}

public void deleteE(){
    if(isEmpty()){
        System.out.println("empty linked list");
        return;
    }
    Node n=start;
    Node link=n;
    while(link.getLink()!=null){
        n=link;
        link=n.getLink();
    }
    n.setLink(null);
    noE--;
}

public void deleteM(int pos){
    if(isEmpty()){
        System.out.println("empty linked list");
        return;     
    }
    int i=1;
    Node curr=start;
    Node link=curr;
    while(i<pos){
        curr=link;
        link=curr.getLink();
        i++;
    }
    link=link.getLink();
    curr.setLink(link);
    noE--;

}

public void display(){
   System.out.println("---> Linked-List <---");
   Node n=start;
   while(n.getLink()!=null){
      System.out.print(n.getData()+" -> ");
      n=n.getLink();
   }

   System.out.println(n.getData());
}

}

客户端代码

import linked.Node;
import linked.LinkedList;
import java.util.Scanner;
public class LinkedListEx{
  public static void main(String [] args){
LinkedList obj=new LinkedList();
Scanner in=new Scanner(System.in);
int data;
int pos;
int choice=0;
char ch;
do{
   System.out.println("LinkedList operation\n1) insertBeging\n2) insertEnd\n3) insertMiddle\n4) deleteBeging\n5) deleteEnd\n6) deleteMiddle\n7) display ");
   System.out.println("pls,enter ur choice . . . ");
   choice=in.nextInt();
   switch(choice){
       case 1: System.out.println("enter data to insertB");
               data=in.nextInt();
               obj.insertB(data);
               break;
       case 2: System.out.println("enter data to insertE");
               data=in.nextInt();
               obj.insertE(data);
               break;
       case 3: System.out.println("enter data to insertM");
               data=in.nextInt();
               System.out.println("give the position to insert");
               pos=in.nextInt();
               obj.insertM(data,pos);
               break;
       case 4: System.out.println("delete data from beging");
               obj.deleteB();
               break;
       case 5: System.out.println("delete data from end");
               obj.deleteE();
               break;
       case 6: System.out.println("give the position to delete in between");
               pos=in.nextInt();
               obj.deleteM(pos);
               break;
       case 7:System.out.println("");
               obj.display();
               break;
       default :
             System.out.println("wrong choice");
             break;
   }

   System.out.println("do u want continue. . . ");
   ch=in.next().charAt(0);

}while((ch=='Y')||(ch=='y'));

} }

3 个答案:

答案 0 :(得分:0)

上面的Node实现将int作为输入(不是String)。您可以使用泛型使其适合其他数据类型。

目前:

public class Node{
   int data;

更改为:

public class Node<T>{
   T data;

对其他方法(如setData(T data)getData()返回T元素的类似行进行修改。

答案 1 :(得分:0)

它不起作用,因为通过查看节点类,您所有节点都可以处理的是整数数据,如果您尝试传递String,您将获得运行时NumberFormatException

答案 2 :(得分:0)

嘿,大家好,感谢你试图找出这个问题的解决方案。我找到了这个问题的解决方案,我在这里。

in.nextInt()只会输入整数值而不是\ n(当我们输入整数后按Enter键)。所以这个\ n仍然在缓冲区中,所以当我们在in.nextInt()之后使用in.nextLine()它会占用或存储\ n。这就是为什么nextLine()返回空行。因此,对于String和Integer,我们应该使用单独的Scanner对象,一个用于取整数,另一个用于String。 谢谢大家。