2016-03-21 6 views
0

私はTabulationメソッドについてJavaでプログラムを作ろうとしています。よく知られていない人には、Tabulationメソッドのステップの1つは、同じ数字の1桁のバイナリをグループ化することです。それで、私たちはarraylistに1の数字の同じ数を持つグループを置きます。したがって、5つの異なるグループ(1桁の数字を含まない1番目のグループ、1の数字を含む2番目のグループなど)があれば、別のグループにそれらを格納します。したがって、arraylistのarraylist。3次元arraylist argumetsは適用されません

Tabulationメソッドでは、各グループの要素を進行中のグループの要素と比較します。次のグループ(正確に1桁異なる)と同様の要素が見つかるたびに、それらを新しいリストに入れます。このリストは再び1桁の数字からグループ化されています。したがって、我々は、arraylistのarraylistのarraylistを持っています。

私がここに持っていることは私のコードの一部です:

allTables.add(new ArrayList<ArrayList<String>>().set(count, new ArrayList<String>().add(mintermBinaries[i]))); 

allTablesは、ArrayListのの配列リストのちょうどArrayListのです。整数の数はバイナリの1桁の数を決定し、そのインデックスに設定します。最後にmintermBinaries [i]は、すべてのバイナリを昇順に含む配列のi番目のインデックスです。コード全体がforループ内にあります。

Eclipseによれば、引数は適用されないため、問題はコンパイルされません。どうしてか分かりません。

これについて多くのことを考えた後、3次元配列が良いことであるかどうかはわかりません。誰も助けることができますか?これを解決するより良い方法は何ですか?

+1

'List.add()'はブール値を返しますが、結果を 'List'として扱います。 –

答えて

2
new ArrayList<ArrayList<String>>().set(
    count, 
    new ArrayList<String>().add(mintermBinaries[i])) 

(あなたがArrayList<ArrayList<String>>上でそれを呼び出しているので)ArrayList<String>ことになっているset()の第2引数は、この式の型は種類がある

new ArrayList<String>().add(mintermBinaries[i]) 

式ですメソッドadd()によって返された値のadd()はブール値を返します。ブール値はArrayList<String>ではありません。

すべてのコードを1行に書き込まないでください。そして、あなたのコードを書くことができます

// Appends an item to the end of the list. 
// Instead of `boolean`, returns modified list itself 
static <T> List<T> add(List<T> list, T item) { 
    list.add(item); 
    return list; 
} 

// Sets an item to arbitrary position in `List`, expanding if needed. 
// Instead of replaced item, returns modified list itself 
static <T> List<T> set(List<T> list, int index, T item) { 
    if (list.size() <= index) { 
     for (int i = list.size(); i <= index; i++) 
      list.add(null); 
    } 
    list.set(index, item); 
    return list; 
} 

:あなたは追加のヘルパーメソッドを必要とする、

List<ArrayList<String>> listOfLists = new ArrayList<ArrayList<String>>(); 
ArrayList<String> innerList = new ArrayList<String>(); 
innerList.add(mintermBinaries[i]); 
listOfLists.set(count, innerList); 
+0

'listOfLists.set()'は空であるので投げます –

+0

@SashaSalauyouはい、それは別の問題です。 –

0
List#add()のreturninig結果

List#set()は、あなたが期待するものとは異なっていると、そのようなワンライナーを使用することを交換してください

add(allTables, set(new ArrayList<List<String>>(), count, add(new ArrayList<String>(), mintermBinaries[i]))); 

これは非常にエレガントではなく、特定のケースでも混乱する可能性があります(List.add()および.set())、そのようなアプローチは、いくつかの状況において、より清潔で効率的に起こり得る。

関連する問題