0

私は、.txtファイルを取得し、データを個別のオブジェクトに集約してから、共有特性に基づいてそのリストを並べ替えるように求められるクラスのプロジェクトに取り組んでいます。私の指示は、プログラムが最大200行のテキストをインポートできるようにすることです。

定義された配列サイズ(.txtファイルに6行、6要素の配列がある場合)を指定して、.txtファイルをインポートするプログラムを正常に実装しましたが、最大200要素まで定義できる必要があります。実際の要素の数、たとえば6を超えると、NullPointerExceptionがスローされます。私のコードは、少なくとも視覚的には、発生する可能性のあるインスタンスを処理するために表示されるため、これが発生している可能性のある場所を見つけることができないようです。ここで問題が発生しています。

public Solid[] solids;
public int length;
public Measurer m;
public int h;

public SolidList(int size) {
    length = 0;
    solids = new Solid[size];
}

public void addSorted(Solid foo, Measurer m) {
    int k = 0;
    if (length != 0) {
        while ((k < length) && foo.greaterThan(solids[k], m))
            ++k;
        for (int j = length; j > k; --j)
            solids[j] = solids[j - 1];
    }
    solids[k] = foo;
    ++length;
}

具体的には、EclipseでのwhileループでNullPointerExceptionが発生していますaddSorted(...)。これは、配列に実際にnull要素が含まれている場合にのみ発生しますが、メソッドがnull要素にアクセスしようとするのを防ぐ方法がわからないと思います。

4

2 に答える 2

5
if (length != 0) {
    while ((k < length) && solids[k] != null && foo.greaterThan(solids[k], m))
        ++k;
    if(solids[k] == null) {
        return;
    }
    for (int j = length; j > k; --j)
        solids[j] = solids[j - 1];
}

問題を解決するかもしれません。ただし、動的入力長のコレクション/配列を処理するには、Collectionsの使用(ArrayListを参照)を実際に検討する必要があります。

于 2012-05-01T21:56:25.320 に答える
3

メソッドがnull要素にアクセスしようとするのを防ぐ方法がわかりません。

配列の特定のインデックスが等しいかどうかを確認してからnull、それを値として使用します。

于 2012-05-01T21:54:07.283 に答える