我认为我的rsort()
方法应该正常工作我总是得到例外:
In Thread "main": java.lang.NullPointerExeception at IntQueue.get(IntQueue.java:47) at V5.main(V5.java:88)
为什么我会收到此异常,我该如何处理?
class IntQueue
{
public int get()
{
int res = fyrsti.tala; // <---- this is line 47 -----
n--;
if( fyrsti == sidasti )
fyrsti = sidasti = null;
else
fyrsti = fyrsti.naest;
return res;
}
static class Hlekkur
{
int tala;
Hlekkur naest;
}
Hlekkur fyrsti;
Hlekkur sidasti;
int n;
public IntQueue()
{
fyrsti = sidasti = null;
}
public int first()
{
return fyrsti.tala;
}
public void put( int i )
{
Hlekkur nyr = new Hlekkur();
n++;
nyr.tala = i;
if( sidasti==null )
fyrsti = sidasti = nyr;
else
{
sidasti.naest = nyr;
sidasti = nyr;
}
}
public int count()
{
return n;
}
}
public class V5
{
public static void main(String [] args)
{
IntQueue q = new IntQueue();
Random rand = new Random();
for(int i = 0; i!= 10000; i++)
q.put(rand.nextInt(1000));
q = rsort(q);
int last = q.get(); // <---- this is line 88 -----
while(q.count() != 0)
{
int x = q.get();
if(x < last)
System.out.println("Wrong");
System.out.println("Right");
last = x;
}
}
public static IntQueue rsort(IntQueue q)
{
IntQueue [] r = new IntQueue[10];
for(int i = 0; i!=10; i++)
r[i] = new IntQueue();
IntQueue q2 = q;
int i = 0, v=1;
while(i != 3)
{
while(q2.count() != 0)
{
int x = q.get();
r[(x/v)%10].put(x);
}
for(int j = 0; j!=0; j++)
{
if(r[j].count() != 0)
q2.put(r[j].get());
else
j++;
}
v *= 10;
i++;
}
return q2;
}
}
<子> [编辑。注意:重新排序和压缩的代码,以使相关的行更加明显]
答案 0 :(得分:3)
例外情况发生在IntQueue
的第47行。作为NullPointerException
,可能是由于以下原因:
当应用程序在需要对象的情况下尝试使用null时抛出。其中包括:
- 调用null对象的实例方法。
- 访问或修改空对象的字段。
- 将null的长度视为数组。
- 访问或修改null的插槽,就像它是一个数组一样。
- 抛出null,就好像它是一个Throwable值。
我的猜测(没有看到IntQueue
的代码就是因为你试图将Integer
自动装箱到int
,但Integer
是null
}。
答案 1 :(得分:0)
嗯,这取决于IntQueue的样子。显然你是从V5.java的第88行调用来自get
的{{1}}方法,并且该方法在IntQueue.java的第47行失败。这可能是由于将错误的参数传递给方法,或者错误地设置IntQueue
或类似的东西。如果没有看到IntQueue
的来源并且不知道哪个是V5.java的第88行,那么很难说。 (您发布的代码 88行。)
我建议你看一下IntQueue.java的第47行并检查它试图解除引用的内容,并查看V5.java的第88行,看看它在调用它。然后你应该能够找出bug的位置。
答案 2 :(得分:0)
当您在Java中有异常时,您在堆栈跟踪中有足够的信息来本地化导致问题的原因。
您的stacktrace
In Thread "main": java.lang.NullPointerExeception
at IntQueue.get(IntQueue.java:47)
at V5.main(V5.java:88)
这意味着在88行的V5类中的main方法中,调用方法get(来自IntQueue)。第47行中的此方法get()对空值进行操作,这会导致NullPointerException
通常,当您遇到异常时,最好的方法是在调试模式下设置断点并检查变量。我建议你在IntQueue中设置47行的断点,然后你会看到错误。