2012-12-08 72 views
0

首先,最重要的是,对于任何和所有的回复,预先感谢,他们不胜感激。现在到这篇文章的目的;我在Java中执行合并排序时遇到问题。我得到一个空指针异常,但是,我无法弄清楚错误是什么,对我来说代码看起来没问题。以下是我迄今:Java中的递归合并

public List mSort(List l) { 

    if (l.size() <= 1) 
     return l; 

    List left = null; 
    List right = null; 
    int mid = l.size()/2; 


    for (int x = 0; x < mid; x++) 
     left.add(l.get(x)); 
    for (int x = 0; x >= mid; x++) 
     right.add(l.get(x)); 

    left = mSort(left); 
    right = mSort(right); 

    return merge(left, right); 
} 

public List merge(List left, List right) { 

    List r = null; 
    while (left.size() > 0 || right.size() > 0) { 
     if (left.size() > 0 && right.size() > 0) 
      if (left.get(0) <= right.get(0)) { 
       r.add(left.get(0)); 
       left.remove(0); 
      } 
      else { 
       r.add(right.get(0)); 
       right.remove(0); 
      } 
     else if (left.size() > 0) { 
      r.add(left.get(0)); 
      left.remove(0); 

     } 
     else if (right.size() > 0) { 
      r.add(right.get(0)); 
      right.remove(0); 
     } 
    } 
    return r; 


} 

...显然,指针异常从“对于”中的“mSort”方法声明,凡是能指出我的错误或指导我未来正确的方向非常感谢!

+1

在哪里堆栈跟踪? –

+0

恐怕我不知道那是什么,也许你可以详细说明一下? –

+0

使用printStackTrace()获取NullPointerException的堆栈数据。 –

回答

1

leftright为空,您不能添加到!

List left = new ArrayList(); 
List right = new ArrayList(); 
+0

伟大的人,谢谢你...我想我只是需要一个额外的眼睛来帮助哈哈:) –

+0

是的,我采取了你的建议,现在我只需要解决几个扭结.. –

-1
for (int x = 0; x < mid; x++) 
     left.add(l.get(x)); 
    for (int x = 0; x >= mid; x++) 
     right.add(l.get(x)); 

必须

int x = 0; 
for (; x < mid; x++) 
    left.add(l.get(x)); 
for (; x < l.size(); x++) 
    right.add(l.get(x)); 
+0

你不用这个答案回答这个问题... –