2011-10-26 42 views
0

运行程序时出现NullPointerException错误,我无法弄清楚原因。确切的错误是在EditDistance.main(EditDistance.java:19)在EditDistance.editDistance(EditDistance.java:32)在线程异常 “主” 显示java.lang.NullPointerException 运行Java程序时出现NullPointerException错误

import java.util.ArrayList; 


public class EditDistance 
{ 

public static void main(String[] args) 
{ 
    ArrayList<Character> a = new ArrayList<Character>(); 
    char[] xArray = null; 
    char[]yArray = null; 
    char[] finalY = null; 
    String x = "AACAGTTACC"; 
    String y = "TAAGGTCA--"; 
    xArray = x.toCharArray(); 
    yArray = y.toCharArray(); 
    a = toArrayList(a , yArray); 

    System.out.println(editDistance(a, xArray, finalY, y)); 


} 

public static int editDistance(ArrayList<Character> a, char[] xArray, char[] finalY, String y) 
{ 
    int temp; 
    for(int i = 0; i<xArray.length; i++) 
    { 
     temp = y.indexOf(xArray[i]); 
     if(temp != -1) 
     { 
      finalY[i] = a.get(temp); 
      a.remove(temp); 
      y = (y.substring(0, temp) + y.substring(temp)); 
     } 

     else if(y.indexOf(xArray[i])==-1) 
     { 
      xArray[i]='z'; 
     }   

    } 
    for(int j =0; j<xArray.length; j++) 
    { 
     if(xArray[j]=='z') 
     { 
      finalY[j]=a.get(j); 
     } 
    } 

    int result = calcScore(finalY, xArray); 
    return result; 
} 

public static ArrayList<Character> toArrayList(ArrayList<Character> a, char[] yArray) 
{ 
    for(int i=0; i<yArray.length;i++) 
    { 
     a.add(yArray[i]); 
    } 
    return a; 
} 

public static int calcScore(char[] finalY, char[] xArray) 
{ 
    int number = 0; 
    for(int i=0; i <xArray.length; i++) 
    { 
     if(finalY[i]==(xArray[i])) 
     { 

     } 
     else if(finalY[i] == '-') 
     { 
      number++; 
      number++; 
     } 
     else if (finalY[i] != xArray[i]) 
     { 
      number++; 
     } 
    } 

    return number; 
} 
} 

任何帮助理解

+1

哪一行是32行? –

+0

您应该用错误标记行,以便更容易发现。 – Lycha

+0

计算上算法很糟糕,您应该尝试使用更高性能的数据结构来编写它。也许不仅仅是一个数组列表你需要一个hashmap? –

回答

6

您将finalY设置为空,将其传递给editDistance,然后尝试设置其条目之一。

如果您想在editDistance中修改它,它不能为空。

如果在editDistance之外没有使用finalY,则它不应该是一个参数:在方法中声明并分配它。

相关问题