【发布时间】:2018-03-27 15:20:16
【问题描述】:
以下 Java 代码比较两个数组的平均值,一个是整数,一个是双精度数。
class Generic_Class<T extends Number>
{
T[] nums; // array of Number or subclass
Generic_Class(T[] o)
{
nums = o;
}
// Return type double in all cases.
double average()
{
double sum = 0.0;
for(int i=0; i < nums.length; i++)
sum += nums[i].doubleValue();
return sum / nums.length;
}
// boolean sameAvg(Generic_Class<T> ob)
// Using Generic_Class<T> i get the error:
// incompatible types: Generic_Class<Double> cannot be converted to Generic_Class<Integer>
// Using wilcards I get no error
boolean sameAvg(Generic_Class<?> ob)
{
if(average() == ob.average())
return true;
return false;
}
}
主要方法是这样的:
public static void main(String args[])
{
Integer inums[] = { 1, 2, 3, 4, 5 };
Double dnums[] = { 1.0, 2.0, 3.0, 4.0, 5.0 };
Generic_Class<Integer> iob = new Generic_Class<Integer>(inums);
Generic_Class<Double> dob = new Generic_Class<Double>(dnums);
System.out.println("iob average is " + iob.average());
System.out.println("dob average is " + dob.average());
if (iob.sameAvg(dob))
System.out.println("Averages of iob and dob are the same.");
else
System.out.println("Averages of iob and dob differ.");
}
结果是:
iob average is 3.0
dob average is 3.0
Averages of iob and dob are the same.
我尝试在 C# 中做同样的事情,但由于我没有通配符,我无法完成同样的任务。
如何使用 C# 做同样的事情?
谢谢。
【问题讨论】:
-
这看起来不像 c#。是 Java 吗?
-
@ZoharPeled,是的,它是 Java。几秒钟前我已经编辑了代码。
-
我已经编辑了您的标题并添加了 java 标签,以使您的问题更清楚。
-
你没有展示你的 C# 代码,或者具体描述了它是如何不工作的。
-
sameAvg代码可以简化为return average() == ob.average();。