0

メソッドとして intersect、union、および print だけを使用して、自分用に Set を構築しようとしています。

私のテストコードは

public static void main(String[] args)
{
    double[] a = {1,2,3,4,101.9};
    double[] b = {3,7,13,901,-29.1,0.0001};

    NumSet test;
    test = new NumSet(a);
    test.intersect(a, b);
    System.out.println("tried intersect [1,2,3,101.9], [3,7,13,901,-28.8,0.001]");
    test.print();
    System.out.println("tried test.print()");
    test.union(a,b);
    System.out.println("tried union [1,3,3,5,7,9], [3,5,7,13]");
}

それは私に

tried intersect [1,2,3,101.9], [3,7,13,901,-28.8,0.001]
0.0,0.0,0.0,out of bounds 4 >= 4 or 4 < 0 
0.0tried test.print()
tried union [1,3,3,5,7,9], [3,5,7,13]

これは奇妙なことです。なぜなら、私のプリントは、2 番目の文のような文をプリントすることとは何の関係もないからです。

public void print() 
{
    for (int i = 0; i < set.size() - 1; i++)
    {
        System.out.print(set.lookup(i) + ",");

    }
    System.out.print(set.lookup(set.size()));
}

これが私の印刷方法です。クラスが別のクラスを拡張しているため、

public class NumSet extends NumArrayList
{
NumList set;

    public NumSet(double[] sth)
    {
        set = new NumArrayList();
        for (int i = 0; i < sth.length; i++)
        {
            set.insert(i, sth[i]);

        }
        set.removeDuplicates();
    }



int numSet = 0;

public NumList intersect(double[] S1, double[] S2)
{
    for (int i = 0; i < S1.length; i++)
    {
        for(int j = 0; j < S2.length; j++)
        {
            if (S1[i] == S2[j])
                {
                set.insert(numSet, S1[i]);
                numSet++;           
                }
        }
    }

    set.removeDuplicates(); 
    return set;

}

public NumList union(double[] S1, double[] S2)
{
    for (int i = 0; i < S1.length; i++)
    {
        set.insert(1, S1[i]);
    }

    for (int i = 0; i < S2.length; i++)
    {
        set.insert(1, S2[i]); 
    }
    set.removeDuplicates();
    return set;
}

そこで印刷方法を調べてみました。

public void print()
{
    for (int i = 0; i < numItems - 1; i++)
    {
        System.out.println(items[i]+ ",");
    }
    System.out.println(items[numItems-1]);

}

なぜ私のエラーメッセージがそのようなものなのか、私は唖然とします。

このような奇妙なメッセージを取得するために私の印刷物はどこを参照していますか?

4

1 に答える 1

0

-1最後のprintステートメントにa がありません:

System.out.print(set.lookup(set.size()));

次のようにする必要があります。

System.out.print(set.lookup(set.size() - 1));

インデックスlookupはゼロベースであるため、使用set.size()は実際には範囲外です。

于 2012-09-30T02:00:18.490 に答える