事实上,我想使用" normOfVector()"使用Integer和Float的方法,但我不能
我收到此错误:
TestMethod类型中的方法normOfVector(ArrayList)不适用于参数(ArrayList)
package code;
import java.util.ArrayList;
import java.util.List;
public class TestMethod
{
public static float normOfVector(ArrayList<Integer> list)
{
float sum = 0.0f;
for (Integer i : list)
sum = sum + (float) (i * i);
// end for
return (float) Math.sqrt(sum);
}// end function
public static void main(String[] args)
{
// In this case no Problem
ArrayList<Integer> listI = new ArrayList<>();
listI.add(0);
listI.add(3);
listI.add(5);
listI.add(7);
listI.add(2);
float result = normOfVector(listI);
// In this case will not work
ArrayList<Float> listF = new ArrayList<>();
listF.add(0.0f);
listF.add(3.0f);
listF.add(5.0f);
listF.add(7.0f);
listF.add(2.0f);
result = normOfVector(listF);
}// end main
}// end class
我的观点是:
我想创建一个接受这两种情况的方法。
谢谢。
答案 0 :(得分:2)
在你的第一个区块中,你是计算数字,但将它们存储为对象。您应该将它们存储为Integer
或Float
,或Double
或Number
,而不是Object
。在您的cos(...)
方法中,您应该通过将声明更改为List<Integer>
,List<Float>
或List<? extends Number>
来限制接受哪种参数。研究java generics并特别是使用PECS principle可能有所帮助。
答案 1 :(得分:0)
根据您更新的代码。
public class TestMethod {
public static double normOfVector(List<? extends Number> list) {
double sum = 0.0;
for (Number d : list)
sum += d.doubleValue() * d.doubleValue();
return Math.sqrt(sum);
}
public static void main(String[] args) {
List<Integer> listI = new ArrayList<>();
listI.add(0);
listI.add(3);
listI.add(5);
listI.add(7);
listI.add(2);
double result = normOfVector(listI);
List<Float> listF = new ArrayList<>();
listF.add(0.0f);
listF.add(3.0f);
listF.add(5.0f);
listF.add(7.0f);
listF.add(2.0f);
result = normOfVector(listF);
}
}
这是我用List<Double>
Map<String, Double> currentWord = new HashMap<>();
double first = main.getWords().get(firstWord);
for(Map.Entry<String, Double> entry : main.getWords()) {
String secondWord = entry.getValue();
double cosValue = vectors.cos(first, entry.getValue());
if (cosValue >= percentage) {
currentWord.put(secondWord, Math.round(cosValue * 100) / 100.0);
break; // is there any point searching for another word?
}
}
答案 2 :(得分:0)
也许你也可以使用这样的东西:
Number[] numbers = new Number[] { valueOfFloat, valueOfInteger };