LinkedList队列数组的NullPointerException

时间:2011-12-26 01:16:02

标签: java queue linked-list nullpointerexception

我在第20行得到了一个奇怪的NullPointerExcpetion:

regs[Integer.parseInt(str.split(" ")[1]) - 1].add(line.poll());

我不知道是什么导致了这一点。有人可以帮我解决这个问题吗?

import java.io.*;
import java.util.*;

public class shoppay
{
public static void main (String[] args) throws IOException
{
    BufferedReader f = new BufferedReader(new FileReader("shoppay.in"));
    PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("shoppay.out")));
    Queue<Integer> line = new LinkedList <Integer>();
    int num = Integer.parseInt(f.readLine());
    String str;
    LinkedList<Integer>[] regs = (LinkedList<Integer>[]) new LinkedList[num];

    while ((str = f.readLine()) != null)
    {
        if (str.charAt(0) == 'C')
            line.add(Integer.parseInt(str.split(" ")[1]));
        else
            regs[Integer.parseInt(str.split(" ")[1]) - 1].add(line.poll());
    }

    out.close();
    System.exit(0);
}
}

另外,我收到警告:

  

类型安全:从java.util.LinkedList []取消选中强制转换为java.util.LinkedList []

这是否与错误有关?

编辑:输入只是一串行。第一行是一个数字,其余的是“C”或“R”后跟一个数字。另外,我需要一个regs队列。

3 个答案:

答案 0 :(得分:0)

不知道你的输入是什么样的,我只能猜出错误的原因。我猜想当你拆分字符串时,你正在拆分导致大小为1的数组的东西。你知道这将是零索引的吗?这意味着数组中的第一个位置是0,第二个位置是1,依此类推。如果您确实打算在列表中选择第二项,请确保您的输入始终分成至少2项。

答案 1 :(得分:0)

不要创建通用列表数组。由于技术原因,它并没有真正干净利落。使用列表列表要好得多:

BufferedReader f = new BufferedReader(new FileReader("shoppay.in"));
PrintWriter out = new PrintWriter(new BufferedWriter(new FileWriter("shoppay.out")));
Queue<Integer> line = new LinkedList <Integer>();
int num = Integer.parseInt(f.readLine()); // not needed
String str;
List<List<Integer>> regs = new ArrayList<List<Integer>>(num);

for (int i = 0; i < num; ++i) {
    regs.add(new LinkedList<Integer>());
}

while ((str = f.readLine()) != null)
{
    if (str.charAt(0) == 'C')
        line.add(Integer.parseInt(str.split(" ")[1]));
    else
        regs.get(Integer.parseInt(str.split(" ")[1]) - 1).add(line.poll());
}

作为附带问题,您是否有任何理由使用LinkedList代替regs而不是ArrayList

答案 2 :(得分:0)

糟糕。我改变主意,决定使用数组。 (int [])我猜它运行正常。