2016-11-07 16 views
-1

は、私は次のようArrayListを作成したいとしましょう:二次元のArrayList

[ 
    [500000, 999999, 900000, "D\u0305", "C\u0305M\u0305"] 
    [100000, 499999, 400000, "C\u0305", "C\u0305D\u0305"] 
    [50000, 99999, 90000, "L\u0305", "X\u0305C\u0305"] 
    [10000, 49999, 40000, "X\u0305", "X\u0305L\u0305"] 
    [5000, 9999, 9000, "V\u0305", "MX\u0305"] 
    [1000, 4999, 4000, "M", "MV\u0305"] 
    [500, 999, 900, "D", "CM"] 
    [100, 499, 400, "C", "CD"] 
    [50, 99, 90, "L", "XC"] 
    [10, 49, 40, "X", "XL"] 
] 

誰には、Javaでこのような何かを実装するための最適なルートを知っていますか?

+1

配列のフィールドを含むクラスを作成します。 2D配列は 'Array 'になります。 –

+0

可能な要素として数字と文字列を使用するには、要素を 'Object'として定義する必要があります。 – Henry

+0

私は5人の異なる方法でこれを検索し、私が見つけた5番目の検索方法 - http://stackoverflow.com/questions/15099463/two-dimensional-array-with-different-types –

答えて

1

あなたが尋ねていることは少し不明です。 Javaでは、実際には2D配列はありません。代わりに配列の配列があります。同様に、異なるものを含むことができる1D ArrayListだけが存在する。

もう1つは保存されているタイプです。私はローマ数字またはアラビア数字を格納する独自のクラスを書くことをお勧めします。

public class RomanOrArabic { 
    private Long arabic; 
    private String roman; 

    public boolean isArabic(){ 
     return arabic != null; 
    } 
    //add getters, smart setters, validators for String being Roman etc. 
} 

その後、あなたのArrayListを宣言:

ArrayList<ArrayList<RomanOrArabic>> list = new ArrayList<>(); 
0

私は、私はここに解決策を投稿するだろうと思ったので、いくつかの混乱があった見ました。

// The solution 
    Object RomanNumeralValues[][] = { 
      {500000, 999999, 900000, "D\u0305", "C\u0305M\u0305"}, 
      {100000, 499999, 400000, "C\u0305", "C\u0305D\u0305"}, 
      {50000, 99999, 90000, "L\u0305", "X\u0305C\u0305"}, 
      {10000, 49999, 40000, "X\u0305", "X\u0305L\u0305"}, 
      {5000, 9999, 9000, "V\u0305", "MX\u0305"}, 
      {1000, 4999, 4000, "M", "MV\u0305"}, 
      {500, 999, 900, "D", "CM"}, 
      {100, 499, 400, "C", "CD"}, 
      {50, 99, 90, "L", "XC"}, 
      {10, 49, 40, "X", "XL"} 
    }; 

    // Where the solution gets used 
    String romanNumeral = ""; 
    for (Object rmRange[]: RomanNumeralValues) { 
     romanNumeral += extractRomanNumeralsBelowOneMillion(
       (int)rmRange[0], 
       (int)rmRange[1], 
       (int)rmRange[2], 
       rmRange[3].toString(), 
       rmRange[4].toString() 
     ); 
    } 

オブジェクト配列から値を引き出すだけでは型キャストに慣れていませんが、動作すると思います。誰かがより良い解決策を持っている場合に備えて質問を残しておきます。

+0

これは悪いアイディア。キャストを使用して、あなた自身のクラスを使用できるときに 'CastException'をキャッチする理由。私の答えを見てください。 – xenteros