2017-03-17 9 views
-3

2次元オブジェクト配列を返すメソッドが与えられました。どのようにして、以下の方法でオブジェクト配列からデータを取得し、テーブルやラベルに入れて内部に格納されているデータを表示できますか?この方法で2D配列からデータを取得するにはどうすればよいですか?

public Object[][] getDifferences(String table) { 
    List<Tuple<Object, Object>> difference = differences.get(table); 
    Object[][] array = new Object[difference.size()][2]; 

    for (int i = 0; i < array.length; i++) { 
     array[i][0] = difference.get(i).item1(); 
     array[i][1] = difference.get(i).item2(); 
    } 

    return array; 
} 

任意の提案:

Object[][] diffs = comp.getDifferences(comp.getName()); 
for(Object diff : diffs){ 

    table.addItem(diff); 
} 

これは私が与えられた方法は次のとおりです。これは私がいない成功を収めて試してみましたが何ですか?

UPDATE:3時52分CST 3/17:

私は

Table table = new Table();  
    Object[][] diffs = comp.getDifferences(comp.getName()); 
    for(int i = 0; i < diffs.length; i++){   
     table.addItem(diffs[i][0]); 
     table.addItem(diffs[i][1]); 
    } 

これも機能していない...これを作ってみました。

Object[][] array = new Object[difference.size()][2]; 

ここでは全体の比較(COMP)クラスは次のとおりです:

public class Compare implements Serializable { 
private String name; 
private Map<String, List<Tuple<Object, Object>>> differences = new HashMap<String, List<Tuple<Object, Object>>>(); 

public Compare(String name) { 
    this.name = name; 
} 

public Compare(byte[] bytes) throws IOException, ClassNotFoundException { 
    ByteArrayInputStream bis = new ByteArrayInputStream(bytes); 
    ObjectInput ois = new ObjectInputStream(bis); 

    Compare compare = (Compare)ois.readObject(); 
    this.name = compare.name; 
    this.differences = compare.differences; 

    bis.close(); 
    ois.close(); 
} 

public String getName() { 
    return name; 
} 

public boolean addDifference(String table, Object control, Object test) { 
    if (!differences.containsKey(table)) { 
     differences.put(table, new ArrayList<Tuple<Object, Object>>()); 
    } 

    differences.get(table).add(new Tuple<Object, Object>(control, test)); 

    return true; 
} 

public Object[][] getDifferences(String table) { 
    List<Tuple<Object, Object>> difference = differences.get(table); 
    Object[][] array = new Object[difference.size()][2]; 

    for (int i = 0; i < array.length; i++) { 
     array[i][0] = difference.get(i).item1(); 
     array[i][1] = difference.get(i).item2(); 
    } 

    return array; 
} 

public byte[] toBytes() throws IOException { 
    ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
    ObjectOutput oos = new ObjectOutputStream(bos); 

    oos.writeObject(this); 
    oos.flush(); 

    byte[] bytes = bos.toByteArray(); 

    bos.close(); 
    oos.close(); 

    return bytes; 
} 

private class Tuple<X, Y> implements Serializable { 
    private final X x; 
    private final Y y; 

    public Tuple(X x, Y y) { 
     this.x = x; 
     this.y = y; 
    } 

    public X item1() { 
     return this.x; 
    } 

    public Y item2() { 
     return this.y; 
    } 
} 

public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException { 
    Compare foo = new Compare("Test Compare"); 
    foo.addDifference("AGREEMENT", 89, 90); 
    foo.addDifference("AGREEMENT", "foo", "bar"); 
    foo.addDifference("ACCOUNT", 123, "Dog"); 

    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("C:\\Users\\uttbm01\\Documents\\Export\\foo.cmp"))); 
    oos.writeObject(foo); 
    oos.close(); 

    ObjectInputStream ois = new ObjectInputStream(new FileInputStream(new File("C:\\Users\\uttbm01\\Documents\\Export\\foo.cmp"))); 
    Compare bar = (Compare)ois.readObject(); 
    ois.close(); 

    System.out.println(); 
} 

}

+0

これは何を比較しようとしていますか?あるStringを別のStringと比較していますか?期待した結果は何ですか? – user681574

+1

このメソッドは2つの配列を返していません。これは* 1 * 2次元配列を返します。 diffs [0] [0]やdi​​ffs [0] [1]などの行と列のインデックスを指定すると、そのメンバーにアクセスできます。 –

+0

このメソッドは、差異リストから「名前」要素を抽出します。そして、これらの抽出された名前をdouble配列に追加します。ここで、array [i] [0] == array [i] [1]を呼び出してそれらを比較し、それらが同じ要素であるかどうかを調べることができます。 ==または.equalを呼び出して、2つの要素を比較することができます。 – Juniar

答えて

0

は、私はあなたのコードのすべてをつもりはない私は、この行を指すNPEを取得します。あなたが言う行の中でなぜNullPointerExceptionが得られるのかわかる理由は、difference.size()differenceがnullなので、nullのメソッドを呼び出しているということです。これは、私がお尋ねしたマップdifferencesにはtableをキーとしてマッピングされていないためです(キーはそこにありますが、それに関連付けられた値はnullです)。

キーと値のペアが(nullの値ではありません)存在することが確かな場合は、キーと値のペアが存在しない理由を確認するためにそこに配置するコードを実行する必要があります。一方、それが保証されない場合はnulldifferenceif-elseのチェックを行う必要があります。 differencenullの場合、メソッドからnew Object[0][]を返すことがあります。

関連する問題