0

値のテーブルを返すために作成したJavaのプログラムがあります。その後、このプログラムの関数が大きくなるにつれて、返されないメソッド内の変数にアクセスしたいのですが、それを実行するための最良の方法がわかりません。複数の値を返すことはできないことは知っていますが、大幅なオーバーホールなしでこの変数にアクセスするにはどうすればよいですか?これが私のコードの簡略版です:

public class Reader {
    public String[][] fluidigmReader(String cllmp) throws IOException {
        //read in a file
        while ((inpt = br.readLine()) != null) {
            if (!inpt.equals("Calls")) {
                continue;
            }
            break;
        }
        br.readLine();
        inpt = br.readLine();
        //set up parse parse parameters and parse
        prse = inpt.split(dlmcma, -1);
        while ((inpt = br.readLine()) != null) {
            buffed.add(inpt);
        }
        int lncnt = 0;
        String tbl[][] = new String[buffed.size()][rssnps.size()];
        for (int s = 0; s < buffed.size(); s++) {
            prse = buffed.get(s).split(dlmcma);
            //turns out I want this smpls ArrayList elsewhere
            smpls.add(prse[1]);
//making the table to search through
            for (int m = 0; m < prse.length; m++) {
                tbl[lncnt][m] = prse[m];
            }
            lncnt++;
        }
        //but I return just the tbl here
        return tbl;
    }

誰かがそれを返さずに別のクラスでsmplsを使用する方法を推奨できますか?これはおそらく、get / setのようなセットアップを使用する場合ですか?これが明白な質問のように思われる場合は申し訳ありませんが、私はまだモジュラープログラミングの世界に慣れていません

4

4 に答える 4

3

現在、このtbl変数があります。それをクラスでラップし、リストをクラスに追加します。

class TableWrapper {
    // default accessing for illustrative purposes - 
    // setters and getters are a good idea
    String[][] table;
    List<String> samples;

    TableWrapper(String[][] table, List<String> samples) {
        this.table = table;
        this.samples = samples;
    }
}

次に、メソッドをリファクタリングしてラッパーオブジェクトを返します。

public TableWrapper fluidigmReader(String cllmp) throws IOException {
    // your code here
    String tbl[][] = new String[buffed.size()][rssnps.size()];
    TableWrapper tw = new TableWrapper(tbl,smpls);
    // more of your code
    return tw;
}  

その後、あなたが行っていたコードの後半

String[][] tbl = fluidigmReader(cllmp);

あなたは代わりに行きます

TableWrapper tw = fluidigmReader(cllmp);
String[][] tbl = tw.table;
List<String> smpls = tw.samples;
于 2013-01-03T20:09:31.807 に答える
1

戻り値に専用のクラス(TableWrapper別の回答で言及されているような)を使用した場合は、そこにフィールドを追加できます。

それはクラスの良いところです-それらは拡張することができます。String[][]ただし、Javaで拡張することはできません。

于 2013-01-03T20:10:37.233 に答える
0

ローカル変数の代わりにフィールドを設定して、後でゲッターで取得することができます。必要でない限り避けたいのですが、この場合はそうです。

于 2013-01-03T20:05:44.360 に答える
0

これにはclass(Inside Reader class)変数を使用できます。ただし、読み取り/書き込みが同期していることを確認してください

于 2013-01-03T20:11:36.187 に答える