0
public class BusInformation {

String BusRoute[][] = new String[4][];

BusRoute[0] = new String[] {"a" , "b", "c"};

BusRoute[1] = new String[] {"a" , "b"};
}

最初のパラメーターのように、バスルートがいくつあるか知っています。2 番目のパラメーターのサイズは可変で、ルートによって異なります。このように初期化するにはどうすればよいですか?

4

3 に答える 3

1

このようにコーディングできるはずです...

public class BusInformation {
    String busRoute[][] = new String[4][0];

    public BusInformation(){
        busRoute[0] = new String[] {"a" , "b", "c"};
        busRoute[1] = new String[] {"a" , "b"};
    }
}

コードと同じですが0、2 番目の次元の初期サイズを指定するのが好きなので、初期サイズがないことは明らかです。また、配列のロードをクラス コンストラクターにラップしました。

2D 配列は、各項目が任意の長さの配列である通常の 1D 配列です。2D 配列を のような初期サイズに設定してもnew String[4][5]、違いはありません。既に行っているのと同じように、基本配列の各項目により小さいまたはより大きい配列を割り当てることができます。

于 2012-10-25T12:28:21.873 に答える
0

サイズが可変で、初期化時に不明な場合、おそらく配列は最適なオプションではありません。2 つの提案があります。1 つは配列を使用するListsか、Guava のMultimapを使用します。

2 次元配列を本当に使用したい場合、または引き続き使用する必要がある場合は、上記のように (要素の最初のセットまたは空の配列として) 初期化し、値を追加する必要がある場合は、Arrays.copyOfを使用して新しい要素を追加できる新しいサイズの配列のコピー。

于 2012-10-25T12:33:29.190 に答える
0

ハードワイヤードの初期化について質問している場合、コードは次のようにより簡潔に記述できます。

public class BusInformation {
    String BusRoute[][] = new String[][]{
        {"a" , "b", "c"},
        {"a" , "b"},
        null,
        null
    };
}

ただし、コンストラクターのメソッドが実行できる初期化の量には厳しい制限があることに注意してください。(これは、メソッドのバイトコードが 64k バイトに収まらなければならないという事実に関係しています。)

ファイルから読み取ったもの (たとえば) から配列を初期化することについて質問している場合、基本的には、必要な配列の大きさを調べ、それらを作成し、それらの値を入力するだけです。(たとえば、データをリストのリストに読み取ってから、2 次元配列形式に変換することができます。

于 2012-10-25T12:36:04.853 に答える