0

オブジェクトの 2 つの配列を比較して、1 つの配列要素を他の配列のすべての値と比較する必要があります。このように実行すると、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:_-`&=*'`~&+,:;=?@#'<>.^*%!-\"\\+[\\s]]+[)]+[\\.\\,\\:]";
    String patterna = "[(]+[-a-z0-9R:_]+[(]+[-a-z0-9R:_-`&=*'`~&+,:;=?@#'<>.^*%!-\"\\+[\\s]]+[)]+[\\,]";
    //String pattern1="[,]+[-a-z0-9R:._-`&=*'`~\"\\+[\\s]]+[\\(.]";
    String pattern1="[,]+[-a-z0-9R:_]+[(]+[-a-z0-9R_,>-`&=*'`~&+,:;=?@#'<>.^*%!-\"\\+[\\s]]+[)]+[\\)\\.]";
    //String pattern1a="[,]+[-a-z0-9R:_]+[(]+[-a-z0-9R_,>-`&=*'`~&+,:;=?@#'<>.^*%!-\"\\+[\\s]]+[)]+[\\.]";
    String pattern3="[\\)]+[\\.@]+[-a-z0-9R:._-`&=*'`~&+,:;=?@#'<>.^*%!-\"\\+[\\s]]+[\\ ,]";
    String pattern4="[\\)]+[\\.@]+[-a-z0-9R:._-`&=*'`~&+,:;=?@#'<>.^*%!-\"\\+[\\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()ステートメントを使用して確認しました。返却方法がわかりません。これはこの概念の完全なコーディングであり、ファイルから入力を読み取ります。

4

4 に答える 4

0

if ステートメントは、配列内の場所が Null の場合にのみ nullpointer をキャストできます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;
于 2013-10-17T06:49:24.317 に答える
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

コードでは、 is でない限り、rcountisが 100 未満の場合はインデックスがあり、 isが 100 より大きい場合は、インデックスが発生します。これら 2 つのことが発生するのは、配列に 100 個のインデックスがあると宣言しているためです。100nullrcountIndexOutOfBoundsrcount

また、ここで参考までに

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

Objects実際に同じものを参照しているかどうかを実際に比較しObject referenceているのではなく、実際にそうであるということではありません==。これが目的の出力に影響するかどうかはわかりません。

于 2013-10-17T07:08:58.137 に答える