您没有提供两个整数列表来相加。你有dynArrList
一个加数,你有arrList1
结果。但是你没有第二个加数,它应该告诉你你还没有真正理解你的问题。要么你的真正任务不是你想象的那样,要么你没有正确地确定你从哪里获取数据。
所以,假设你有两个List<Integer>
s。尽可能对接口编程。您将如何逐项求和?编写一个 sum 方法,并识别如果两个列表的大小不同会发生什么。
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;
}
确定您要添加的内容,然后使用它。
现在,假设您有计算两个整数数组列表的点积的任务。您可能需要两件事——一种对一个列表的元素求和的方法,以及一种获取产品向量的方法。这可能很浪费,因为您可能不需要中间列表,而且您会浪费空间。第一个任务很简单:
public int sum(List<Integer> list) {
int total = 0;
for(Integer element: list) {
total += element;
}
return total;
}
第二个很容易;只需复制并重命名即可:
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 方法之间唯一真正的区别是运算符和名称。这导致了函数式编程,现在这可能太多了。