gpt4 book ai didi

java - 在矩阵加法/乘法中使用泛型

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:10:18 24 4
gpt4 key购买 nike

我正在尝试创建一个自定义类来创建矩阵,除其他外,执行将所有单元格相加或将它们全部相乘的操作。但是,我想使用泛型,以便矩阵可以是任何类型的数字:float、double、int 等。因此我设置了这样的类:

public class Matrix<num>

初始化时,此类的实例化会根据用户提供的数据创建一个矩阵,该矩阵存储在实例的 .matrix 变量中。现在,在我想要添加所有单元格的代码中,我执行如下操作:

public num addMatrices(num[][] toAdd){
num result;
if (toAdd.length != this.rows && toAdd[0].length != this.columns){
System.out.println("Matrix mismatch. Try Again.");
return toAdd[0][0];
}
for (int i=0; i<rows; i++)
for (int j=0; j<rows; j++){
result = this.matrix[i][j] + toAdd[i][j];
}
}

但是,我遇到了多个问题。首先,我无法将结果初始化为零,这使得执行 += 操作变得困难。其次,当我尝试将两个矩阵的单元格相加时,编译器告诉我 + 运算符对于类型 num 是未定义的。

我认为泛型的全部意义在于拥有一个包罗万象的类型,这样我就可以做一些事情,比如在一种情况下使用 float ,在另一种情况下使用整数,但如果我需要为像 + 这样的运算符指定类型,我不确定优势在哪里……

最佳答案

您不能执行类似 + 的操作和 -在对象上(排除一些特殊情况)。泛型都是关于对象类型的,所以你对它们的用例并不理想。

就是说,您可以将您的声明变成类似于 public class Matrix<num extends Number> 的内容, 这会让你传入 Integer , Double , BigInteger等,然后您可以使用类似 num.longValue() 的内容或 num.doubleValue()得到你的数字的长或双表示。然后您需要返回 doublelong或您的方法中的任何内容,而不是您的通用类型。

另一种选择是创建一个自定义容器类,其中包含加法、减法等方法。然后您的类声明可以是public class Matrix<num extends Custom>。 .您必须弄清楚如何考虑将多头添加到 double 并返回自定义类型。

关于java - 在矩阵加法/乘法中使用泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14634535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com