2017-10-13 3 views
1

情報を格納する行列を作成しようとしました。たとえば、AとQが合致する場合、-1を返します。私の質問は、2D配列では、文字とintの両方を格納する方法はありません、Javaで次の行列を初期化する方法はありますか?あなたの例 "A"、 "R"、 "N"、 "D"、 "C"、及び "Q" でJavaにcharとintの両方を持つ行列を作成してください。

A R N D C Q  
A 4 -1 -2 -2 0 -1 
R -1 5 0 -2 -3 1 
N -2 0 6 1 -3 0 
D -2 -2 1 6 -3 0 
C 0 -3 -3 -3 9 -3 
Q -1 1 0 0 -3 5 
+0

配列は、あなただけは、インデックスが2つの段階で行う必要があります、配列のインデックスとして整数を受け入れるので、 。 –

+0

@Haroldo_OKこの場合、マトリックスの順序が変更されます。つまり、変更されたマトリックスでは、AとRは隣り合っていますか? – vkosyj

答えて

3

は、それらがそのインデックスの軸ラベルである、マトリックスのメンバーではありません。それらを整数と同じ行列に格納する必要はありません。

ラベルを使用して別の配列を作成し、それを使用して、インデックス名('A''R''N'など)を行列次元の数値インデックスに「変換」します。

static final String dimLabels = "ARNDCQ"; 

char dimChar = 'R'; 
int dimIndex = dimLabels.indexOf(dimChar); 
if (dimIndex >= 0) { 
    ... // The index is valid 
} else { 
    ... // The index name is invalid 
} 
4

どのように地図の地図について:それを行うには

一つの方法は、マトリックスへのインデックスを取得するためにString dimLabels = "ARNDCQ"を使用し、それにindexOfを適用するのですか?

Map<Character, Map<Character, Integer>> matrix = TreeMap<>(); 

あなたはTreeMapのほかに地図の他の実装を使用することができ、私はあなたがあなたの鍵は、(場合には注意してください)アルファベット順にソートしたいと思います把握します。

地図を表示するときと同じように地図を表示します。例えば、文字Aのための...

Map<Character, Integer> mapA = new TreeMap<>(); 
mapA.put('A', 4); 
mapA.put('R', -1); 
mapA.put('N', -2); 
mapA.put('D', -2); 
mapA.put('C', 0); 
mapA.put('Q', -1); 

matrix.put('A', mapA); 

はAQを参照するには、 matrix.get('A').get('Q')を起動し、結果として希望 -1になるだろう。

3

あなたは自分のクラスを作成することができますし、それにこのような何か必要な情報を格納することができます:

class Dot { 
    private int value; 
    private String rowId; 
    private String columnId; 

    public Dot(String rowId, String columnId, int value) { 
     this.rowId = rowId; 
     this.columnId = columnId; 
     this.value = value; 
    } 

    // getter/setters 
} 

次にあなたは、Listを作成し、リストの中にドットを追加し、search(comunnId, rowId)ためのメソッドを作成することができます。

List martix = new ArrayList<Dot>(); 
matrix.add(new Dot("A", "Q", -1)); 
... 

と検索方法:

public int search(String comunnId, String rowId) { 
    ... 
} 

は、それはあなたが望むものを実装するのに役立ちます願っています。

+0

配列やMap <>を使用する代わりに、クラスを実際にプロモートする答えを見てみるとどれくらい爽快です。 –

+0

配列のデータ型がこの問題に最も適していません。 – zappee

+0

最も簡単な解決策は、Map mapです。これをマップに追加します( "AQ"、-1)。それから値を取得するのはとても簡単です:map.get( "AQ")。しかし、これはオブジェクト指向のソリューションではなく、Javaは強力なOO言語です。 – zappee

2

各文字に整数と配列の配列を関連付けることができ、効果的にマップをマップとして構築できます。実際に行列へのアクセスに対応した数値インデックスに文字を変換するには1を、そして別:Javaで

Map<Character, int[]> dataMap = new HashMap<>(); 
    dataMap.put('A', new int[] { 4, -1, -2, -2, 0, -1}); 
    dataMap.put('R', new int[] {-1, 5, 0, -2, -3, 1}); 
    dataMap.put('N', new int[] {-2, 0, 6, 1, -3, 0}); 
    dataMap.put('D', new int[] {-2, -2, 1, 6, -3, 0}); 
    dataMap.put('C', new int[] { 0, -3, -3, -3, 9, -3}); 
    dataMap.put('Q', new int[] {-1, 1, 0, 0, -3, 5}); 

    Map<Character, Integer> orderMap = new HashMap<>(); 
    orderMap.put('A', 0); 
    orderMap.put('R', 1); 
    orderMap.put('N', 2); 
    orderMap.put('D', 3); 
    orderMap.put('C', 4); 
    orderMap.put('Q', 5); 

    int val = dataMap.get('A')[orderMap.get('Q')]; 
    System.out.println(val); 
関連する問題