2013-10-17 62 views
0

我需要比較兩個對象數組來檢查一個數組元素與其他數組的所有值。如果我這樣執行,它會在if語句中顯示NULL點異常。如何比較兩個對象數組來檢查一個數組元素與其他數組的所有值?

package unlcomp; 

import java.util.HashMap; 
import java.util.List; 

public class relation { 
    int rcount=0; 
    int r1count=0; 
    public String[] rel=new String[100]; 
    relation rm[]=new relation[100]; 
    relation rm1[]=new relation[100]; 
    public String[] UW1=new String[1000]; 


    public relation[] hash(String[] s,String[] s1,int rcount) { 
     for(int i=1;i<=rcount;i++) { 
      rm[i]=new relation(); 
      rm[i].rel[i]=s[i]; 
      rm[i].UW1[i]=s1[i]; 
     } 
     return rm; 

     // System.out.println(rcount); 
    } 

    public relation[] hash1(String[] s,String[] s1,int r1count) { 
     for(int i=1;i<=r1count;i++) { 
      rm1[i]=new relation(); 
      rm1[i].rel[i]=s[i]; 
      rm1[i].UW1[i]=s1[i]; 
     } 
     return rm1; 
    } 

    public void compare() { 
     relation r[]= rm; 
     relation r1[]=rm1; 

     for(int i=1;i<r.length;i++) { 
      for(int j=1;j<r1.length;j++) { 
       if(r1[i].rel[i].equals(r[j].rel[j])) { 
        System.out.println("true"); 

       } else { 
        System.out.println("false"); 
       } 
      } 

     } 
    } 
} 

我需要從另一個類名稱調用此比較方法。

這是調用上述功能的類..

package unlcomp; 

import java.io.File; 
import java.io.IOException; 
import java.util.Scanner; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Unlcomp { 
    public String[]rel; 
    public String[] UW1; 
    public String[] UW2=new String[100]; 
    public String[] att1=new String[100]; 
    public String[] att2=new String[100]; 
    int i=0; 

    public String[] store=new String[500]; 
    String pattern2="[-a-z0-9R:._-`&=*'`~\"\\+[\\s]]+[\\(]"; 

    //String pattern = "[(]+[-a-z0-9R:._-`&=*'`~\"\\+[\\s]]+[\\(.,]"; 
    String pattern = "[(]+[-a-z0-9R:_]+[(]+[-a-z0-9R:_-`&=*'`~&+,:;[email protected]#'<>.^*%!-\"\\+[\\s]]+[)]+[\\.\\,\\:]"; 
    String patterna = "[(]+[-a-z0-9R:_]+[(]+[-a-z0-9R:_-`&=*'`~&+,:;[email protected]#'<>.^*%!-\"\\+[\\s]]+[)]+[\\,]"; 
    //String pattern1="[,]+[-a-z0-9R:._-`&=*'`~\"\\+[\\s]]+[\\(.]"; 
    String pattern1="[,]+[-a-z0-9R:_]+[(]+[-a-z0-9R_,>-`&=*'`~&+,:;[email protected]#'<>.^*%!-\"\\+[\\s]]+[)]+[\\)\\.]"; 
    //String pattern1a="[,]+[-a-z0-9R:_]+[(]+[-a-z0-9R_,>-`&=*'`~&+,:;[email protected]#'<>.^*%!-\"\\+[\\s]]+[)]+[\\.]"; 
    String pattern3="[\\)]+[\\[email protected]]+[-a-z0-9R:._-`&=*'`~&+,:;[email protected]#'<>.^*%!-\"\\+[\\s]]+[\\ ,]"; 
    String pattern4="[\\)]+[\\[email protected]]+[-a-z0-9R:._-`&=*'`~&+,:;[email protected]#'<>.^*%!-\"\\+[\\s]]+[\\)]"; 

    Pattern r = Pattern.compile(pattern); 
    //Pattern ra = Pattern.compile(patterna); 
    Pattern r1 = Pattern.compile(pattern1); 
    //Pattern r1a = Pattern.compile(pattern1a); 
    Pattern r2 = Pattern.compile(pattern2); 
    Pattern r3 = Pattern.compile(pattern3); 
    Pattern r4 = Pattern.compile(pattern4); 

    String line; 
    relation obj=new relation(); 
    private int rcount=0; 

    public void preprocess(String pathf1,String pathf2) throws Exception { 
     try { 
      Scanner scanner = new Scanner(new File(pathf1)); 
      scanner.useDelimiter("###"); 
      Scanner scanner1 = new Scanner(new File(pathf2)); 
      scanner1.useDelimiter("###"); 
      //BufferedReader br1 = new BufferedReader(new FileReader(pathf2)); 
      if(scanner.hasNext()) { 
       if(scanner1.hasNext()) 
        extract(scanner.next()); 
       obj.hash(rel,UW1,rcount); 
       extract(scanner1.next()); 
       obj.hash1(rel,UW1,rcount); 
       obj.compare(); 
      } 
      scanner.close(); 
      scanner1.close(); 
     } catch (IOException e) {} 
    } 

    public void extract(String line) { 
     String [] lines=line.split("\n"); 
     System.out.println(line); 
     rel=new String[100]; 
     UW1=new String[100]; 
     for(String line1: lines) { 
      // rel=null; 
      // UW1=null; 
      //UW2=null; 
      //att1=null; 
      //att2=null; 

      Matcher m2 = r2.matcher(line1); 
      Matcher m1 = r1.matcher(line1); 
      Matcher m3 = r3.matcher(line1); 
      Matcher m4 = r4.matcher(line1); 
      Matcher m = r.matcher(line1); 

      if(m2.find()) { 
       rel[i]=m2.group(); 
       rel[i]=rel[i].substring(0, rel[i].length()-1).trim(); 
       rcount++; 
       //System.out.println(rel[i]); 
      } 
      if(m.find()) { 
       UW1[i]=m.group(); 
       UW1[i]=UW1[i].substring(1, UW1[i].length()-1).trim(); 
      } 
      i++; 
     } 
    } 

    public static void main(String[] args) throws Exception { 
     Unlcomp u=new Unlcomp(); 
     String pathsr="E:/M.E/project/test.txt"; 
     String pathdes="E:/M.E/project/test1.txt"; 
     relation r=new relation();  

     u.preprocess(pathsr,pathdes); 

    } 
} 

這需要在rm的值需要在對象在數組值。我使用system.out.println()聲明檢查了它。我不知道如何回報它。這是這個概念的完整編碼,它從文件讀取輸入。

+0

前一個方法來檢查空當詢問的NPE請張貼堆棧跟蹤...投票關閉原樣.... – Thihara

+1

你是如何調用'哈希()'和'HASH1 ()',你傳入了什麼'String'數組? –

+0

你在哪裏添加數據到數組? – JWqvist

回答

0

if語句只能投一個空指針,如果數組中的地方是其他空的方法看起來不錯,除非你只子陣列中尋找一個地方r1[i].rel[i]

   if(r1[i].rel[i].equals(r[j].rel[j])) 
      { 
       System.out.println("true"); 
      } 
      else 
      { 
       System.out.println("false"); 

而且失去的初始化非靜態或最終變量

public class relation { 
int rcount; 
int r1count; 
public String[] rel; 
relation rm[]; 
relation rm1[]; 
public String[] UW1; 
0

問題肯定是空值。

r1或r1 [i]或r1 [i] .rel [i]或r [j]可能爲空。

比較之前檢查空值。

+0

如何檢查空值 –

0

試試這個

relation rm[]; 
relation rm1[]; 

public relation[] hash(String[] s,String[] s1,int rcount) 
{ 
    rm = new relation[rcount]; 
    rm1 = new relation[rcount]; 

    ... 
} 

// Do the same for hash1 

在您的代碼,除非rcount100,會有null指數如果rcount低於100,你會得到一個IndexOutOfBounds如果rcount大於100 這兩件事情將會發生,因爲你聲明你的數組有100個索引。

而且,這裏僅供參考

(r1[i].rel[i].equals(r[j].rel[j])) 

你實際上是比較Objects是否指同一個Object reference,倒不是說實際上是==。我不知道這是否會影響您所需的輸出。

+0

它給出了數組越界異常.. –

0

如你沒有更新你調用方法,你是如何填充你的relation[]rmrm1compare法,雙循環condtion終點爲長,因爲你已經定義的長度爲100

public String[] rel = new String[100]; 
relation rm[] = new relation[100]; 

如此循環將itrated 100次和if (r1[i].rel[i].equals(r[j].rel[j])) {

r1[i].rel[i] , here r1[i] 

是空的索引,當你還沒有與OBJ intilized ECT在陣列的那個位置,

,你嘗試在null做任何操作null.rel [I]會變成NPE

您需要照顧的

public String[] rel = new String[100]; 
    relation rm[] = new relation[100]; 

確保您在所有位置都有元素。

extract(scanner.next()); 
obj.hash(rel,UW1,rcount); 

preprocess方法,你一定總是要傳遞rCount爲100,如果沒有則在hash方法你沒有關係對象的數組中的所有元素。製作比較喜歡

if (r1[i] != null && r[j] != null && r1[i].rel[i].equals(r[j].rel[j])) 
相關問題