此代码适用于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'));
} }
答案 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。 谢谢大家。