合計する整数の 2 つのリストが指定されていません。あなたはdynArrList
加数として持っています、そしてあなたはarrList1
結果のために持っています。しかし、問題をまだ本当に理解していないことを示す 2 番目の加数がありません。あなたの本当の仕事はあなたが思っているものではないか、どこからデータを取得しているかを正確に特定していません。
したがって、 が 2 つあるとしますList<Integer>
。可能であればインターフェイスにプログラムします。項目ごとにどのように計算しますか? sum メソッドを作成し、2 つのリストのサイズが異なる場合に何が起こるかを認識します。
public List<Integer> sum(List<Integer> left, List<Integer> right) {
if (left.size() != right.size()) {
// A runtime exception you write saying that you can't add two
// arrays of different sizes.
throw new VectorShapeException(left.size(), right.size());
}
List<Integer> vectorSum = new ArrayList<>();
for (int i = 0; i < left.size(); ++i) {
vectorSum.add(left.get(i) + right.get(i));
}
return vectorSum;
}
追加したいものを特定し、これを使用します。
ここで、2 つの整数配列リストの内積を計算する割り当てがあったとします。1 つのリストの要素を合計するメソッドと、積のベクトルを取得するメソッドの 2 つが必要になる場合があります。おそらく中間リストは必要なく、スペースを浪費するため、これは無駄かもしれません。最初のタスクは簡単です。
public int sum(List<Integer> list) {
int total = 0;
for(Integer element: list) {
total += element;
}
return total;
}
2 つ目は簡単です。コピーして名前を変更するだけです:
public List<Integer> product(List<Integer> left, List<Integer> right) {
if (left.size() != right.size()) {
// A runtime exception you write saying that you can't multiply two
// arrays of different sizes.
throw new VectorShapeException(left.size(), right.size());
}
List<Integer> vectorProd = new ArrayList<>();
for (int i = 0; i < left.size(); ++i) {
vectorProd.add(left.get(i) * right.get(i));
}
return vectorProd;
}
public int dotProduct(List<Integer> left, List<Integer> right) {
return sum(product(left, right));
}
しかし、ここで厄介な問題があります。切り貼りと修正は、私がそこまで考えていなかったことの表れです。2 引数の sum メソッドと product メソッドの唯一の実際の違いは、演算子と名前です。これは関数型プログラミングにつながりますが、これはおそらく今のところ多すぎます。