我尝试使用列表删除列表的第一个节点并返回删除的值来执行removeFirst()。
以下是我所拥有的:
public E removeFirst() {
E value=first.val;
first=first.next;
size--;
return value;
}
public void addLast(E v) {
last = new Node(v,last);
size++;
}
其他课程:
class Cliente {
String nome;
int tchegada;
int np;
Cliente(String n, int tc, int p) {
nome = n;
tchegada = tc;
np = p;
}
}
清单:
class List<E> {
private int size;
private Node first;
private Node last;
public boolean isEmpty() {return (size == 0);}
public int size() {return size;}
// construtor de lista vazia
List() {
size = 0;
first = last = null;
}
// um no da lista
private class Node {
E val;
Node next;
Node(E v, Node n) {
val = v;
next = n;
}
}
(...)
主:
class Prob106_v0 {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
// Read the flag
int flag = in.nextInt();
// Read the boxes to an array
int n = in.nextInt();
Caixa caixas[] = new Caixa[n];
for (int i=0; i<n; i++) {
int k = in.nextInt();
caixas[i] = new Caixa(k);
}
// Read the clients to a list of objects
int c = in.nextInt();
List<Cliente> clientes= new List<Cliente>();
for (int i=0; i<c; i++) {
String nome = in.next();
int tempo_chegada = in.nextInt();
int num_produtos = in.nextInt();
clientes.addLast(new Cliente(nome, tempo_chegada, num_produtos));
}
// Flag 0 - Remove each client and write the name of the one just removed
if(flag == 0) {
while(!clientes.isEmpty()) {
Cliente cli = clientes.removeFirst();
System.out.println(cli.nome);
}
} else {
// This doesn't matter, it's another part of the program I haven't finished.
Subtarefas.resolve(flag, n, caixas, clientes);
}
}
}
恢复,我应该删除列表中的第一个元素&#39; clientes&#39;并返回我刚删除的内容,在本例中为客户端名称(cliente.nome),直到没有要删除的内容(null)。
但我收到了NullPointException
Exception in thread "main" java.lang.NullPointerException
at List.removeFirst(Prob106_v0.java:80)
at Prob106_v0.main(Prob106_v0.java:135)
编辑:当列表为空时,不会使用RemoveFirst。但我发现当大小为1时,会产生异常。我该如何解决这个问题?
答案 0 :(得分:0)
如果您的列表只有一个元素,请使用此代码段:
public E removeFirst() {
E value=first.val;
first=first.next;
size--;
}
return value;
}
将导致NullPointException
public E removeFirst() {
E value=first.val;
if (size>=2)
{
first=first.next;
}
else if (size==1)
{
last=null;
}
size--;
return value;
}
答案 1 :(得分:0)
您需要确保列表中有某些内容,否则removeFirst()
会爆炸
答案 2 :(得分:0)
这里的问题是first=first.next;
如果您的列表只有一个元素,则不会有下一个节点,因此为null。