2012-05-01 24 views
0

私は、.txtファイルを取得し、データを別個のオブジェクトに集め、共有特性に基づいてそのリストをソートするように求められているクラスのプロジェクトに取り組んでいます。私の指示は、プログラムが最大200行のテキストをインポートできるようにすることです。Javaの多態性、継承、および配列ソートの演習

定義済みの配列サイズ(.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はaddSorted(...)でwhileループにNullPointerExceptionが遭遇しています。これは、配列に実際にnull要素がある場合にのみ発生しますが、メソッドがnull要素にアクセスしようとするのを防ぐ方法を見つけられないと思います。

+0

まず、生の配列をインスタンスリストにするために、Javaコレクションを使用する方がはるかに優れています。この場合、サイズは先験的に与えられないかもしれない。 – gregory561

+0

私はGregoryと一緒にArrayListをチェックしています - > http://docs.oracle.com/javase/1.4.2/docs/api/java/util/ArrayList.html また、Collections.sortソートを行うコンパレータ - > http://docs.oracle.com/javase/1.4.2/docs/api/java/util/Collections.html#sort(java.util.List、java.util.Comparator ) –

+0

あなたは本当に例外スタックトレースを掲示していたはずです。このように人々はあなたの問題を推測しているだけです。示されたコードは、fooが 'null'を除いてNPEを投げません。 stacktraceはおそらくNPEが 'greaterThan'メソッドの中からスローされたことを示します。 –

答えて

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を見てください)を使って、動的入力長のコレクション/配列を扱うべきです。

+0

さん、宿題になった/削除する必要がありますか? – esej

+0

ああ、今私は参照してください。私は、私のコメントを削除します。 –

+0

私は宿題としてそれをタグ付けしておくべきです - 申し訳ありません!これは私の最初の投稿であり、まだルールを学んでいます。 ArrayListを使用しますが、このクラスの期間中は配列を使用することに制限されています。理解しやすいですが、はるかに難しくなります。お手伝いありがとう! – idigyourpast

3

メソッドがnull要素にアクセスしようとしないようにする方法を理解できません。

値として使用するものを実行する前に、配列の特定のインデックスがnullに等しいかどうかを確認してください。