1

readData()ファイルを読み取る関数があり、解析されたデータのいくつかの異なるオブジェクトを返します。現在、の戻りタイプreadData()は次のObject[]とおりです。

Object[] data = readData();
MyGenome genome = data[0];
Species[] breeds = data[1];
//etc

これはぎこちなく感じます。このデータを返すためのより良い方法はありますか?readGenome()のような個別の関数は必要ありませんreadSpecies()。ファイルを2回繰り返す必要があるためです。また、データの収集をすべて1つの関数にまとめたいと思います。

同様の問題:2つの文字列間で少なくとも4文字の一致を返す関数:

public int[][] findMatch(String g0, String g1) { /* cool stuff */ }
//...
int[][] bounds = findMatch("ACOIICOCOCICOICA", "AOCCCCCCICCIIIIIOIAOCICOICOICA");

ここbounds[0][0]で、はg0の左境界、はg0bounds[0][1]の右境界、bounds[1][0]はg1の左境界などです。これも、ちょっと厄介な感じがします。キーを継続的に検索せずに結果をコーディングすることは困難です。

4

4 に答える 4

6

新しいクラスを作成します。

class MyAnalysedGenome {
    MyGenome genome;
    Species[] species
    ...
}

そしてそれを返します。おそらく、そこに組み込まれるべき他の機能があることに気付くでしょう。おそらく、getData()呼び出しを囲むコードです。

于 2009-09-29T02:12:00.200 に答える
5

強い型のクラスを使用して、readData()の複雑な戻り型を表すのはどうですか?

public class Taxonomy
{
    public MyGenome genome;
    public Species[] breeds;
    //etc
{

Taxonomy data = readData();

検索範囲の問題についても同じことができます

public class SearchBoundary
{
    public int left;
    public int right;
}

SearchBoundary resultBounds = findMatch(searchBounds);
于 2009-09-29T02:12:31.970 に答える
0

最初の問題では、単に中間データ表現を使用できませんでしたか?つまり、ファイルを1回読み取ると、ファイルの内容が得られ(必要な方法でフォーマットできます)、次に2つのメソッドreadGenome()を作成readSpecies()し、このファイルの内容をパラメーターとして受け取ります。

于 2009-09-29T02:12:53.193 に答える
0

ゲノムと種をフィールドとして持つクラスを作成できます。

...
class DataToBeRead {
    MyGenome  genome;
    Species[] breeds;
}
...


DataToBeRead data   = readData();
MyGenome     genome = data.genome;
Species[]    breeds = data.breeds;

他の誰かがクラスを使用すると思わない場合はクラスを非公開にし、他の誰かが使用する場合は公開することができます。

別のファイルを作成したくない場合は、静的にすることもできます。

お役に立てれば。

于 2009-09-29T02:13:02.320 に答える