2016-06-21 6 views
1

私は従業員の情報を追跡するプログラムを作成しています。レコード([employee] [piece_of_data])を含む2D配列があり、配列をループして現在のレコードを次のレコードと同じにすることでレコードを削除できます。すべての要素を折りたたんで2D配列の要素を削除する

現在のところ、現在のレコードではなく、選択されたレコードのレコードを削除していますが、それを操作しても適切なレコードは削除されません。私が代わりにこの奇妙な二重の配列での作業のあなたは正しい方法でこの問題を解決することを示唆している

//Delete current record, collapse records into it 
    for (int iLoop = iEmployee; iLoop < iEmployeeCount; iLoop++){ 
     for (int iLoop2 = 0; iLoop2 <= 20; iLoop2++){ 
      sData[iLoop][iLoop2] = sData[iLoop + 1][iLoop2]; 
     } 
    } 
+0

あなたは 'sData [iLoop - 1] [iLoop2] = sData [iLoop] [iLoop2];'を試しましたか? – Ian

+0

はい、しかし、このように、つまりsData [iLoop - 2] [iLoop2] = sData [iLoop - 1] [iLoop2];を変更しても、現在のレコードに続くレコードは削除されます。 out of bounds例外です。私はとても混乱しています、これはとても簡単なコードです。 –

+0

固定配列でなければならないのですか?または、あなたはArrayListまたは他のコレクションを使用することができますか? Objectクラスを作成できない理由はありますか? – Ian

答えて

2

は、ここに私のコードです。現在のコードは面倒でメンテナンスはできません。さらに悪いことに、2D配列のすべての列をシフトした後に最後の列に2番目の最後の列の複製が含まれるため、おそらくレコードが重複しているようです。

Javaはオブジェクト指向言語です。オブジェクトを使用する。

//declare a class to store the info about one employee 
//this will replace one column in your double array 
public class Employee { 
//each one of these fields corresponds to one cell in your double array 
public string data1; 
public string data2; 
public string data3; 
} 

そして、リンクリストに保存:

//this is just an example of how you would add employees to a list instead of an array 
LinkedList<Employee> employees = new LinkedList<>(); //make a linked list 
Employee toAdd = new Employee();      //make an employee 
toAdd.data1 = "example";        //set up his data 
toAdd.data2 = "setting"; 
toAdd.data3 = "fields"; 
employees.add(toAdd);        //add him to the list 

それからちょうどあなたが望む従業員へのリンクを取得するには、代わりに配列し、この複雑でinefficent方法を行うので、従業員を削除すると、

employees.remove(iEmployee); 

ここで、iEmployeeは、削除する従業員のリスト内の番号です。

+0

ありがとう、本当に役立つここでは、私はこのようなことをもう一度考えて考える前に、ここに戻って参照してください。これは私の高校の最終的なパフォーマンスのためのもので、私は戻ってこなかったのです。私が私のスタートをもう一度やり直すならば、私は多分(これも含めて)たくさんのことをやっているだろうが、私はすでに終わりに近づいており、私のプログラムのすべてがこの特定の配列の周りを回っている。この問題の修正は、私が今必要なものです。 –

0

あなたがオブジェクトに行列を変換することができず、全体の事のためのArrayListを使用することができないので、ここでそれを行う方法です:

ArrayList<String[]> a=new ArrayList(Arrays.asList(sData)); 
a.remove(iEmployee); 

これは、文字列のArrayListに行列を変換しますアレイ。

Object[] oa = a.toArray(); 
for(int i = 0; i<oa.length; i++){ 
    sData[i] = (String[])oa[i]; 
} 

これで、ArrayListがsDataマトリックスに変換されます。

編集:これ以外の設定マトリックスサイズを持つ場合は、このオプションは動作しません。これにより、データを削除した後に行列のサイズが変更されます。

関連する問題