LinkedList队列数组的NullPointerException



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

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。

不要创建泛型列表数组。由于技术原因,它并不能很好地工作。使用列表的列表要好得多:

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吗?

不知道你的输入看起来像什么,我只能猜测错误的原因。我猜当你分割字符串的时候,你分割的是一个大小为1的数组。你知道这将是零索引吗?这意味着数组中的第一个位置是0,第二个位置是1,以此类推。如果您确实打算选择列表中的第二个项目,那么请确保您的输入始终至少分为2个项目。

哎呀。我改变了主意,决定使用数组。(int[]) I guess it work fine.

相关内容

  • 没有找到相关文章

最新更新