如何创建一个 class 包含多个可以执行操作的方法,可以接收 int、double、float、long、short 的数组列表
how to create a class that contain multiple medhods that can do operations, that can receive an arraylist of int,double,float,long,short
我想创建一个 class,其中包含多个可以进行数学运算的方法。该方法应该能够接收 int、double、float、long、short 的 ArrayList。我制作了这些方法,以便它们可以接收双精度 ArrayLists,因为根据我的理解,双精度是所有其他数字类型的父级。为什么我的方法不能接收整数的 ArrayList?
这是我的代码:
import java.util.*;
import java.util.ArrayList;
class Operations <U extends Number>
{
// Function for calculating mean
public static double mean(ArrayList<Double> doubles)
{
double sum = 0;
for (int i = 0; i < doubles.size(); i++)
sum += doubles.get(i);
return (double)sum / (double)doubles.size();
}
// Function for calculating maximum value
public static double max(ArrayList<Double> doubles){
Collections.sort(doubles);
double max=0;
max=doubles.get(doubles.size()-1);
return max;
}
// Driver code
}
public class Main {
public static void main(String args[])
{
ArrayList<Double> doubles = new ArrayList<>(){
{add(4.3); add(5.9); add(2.3); add(9.5);}
};
ArrayList<Integer> integers = new ArrayList<>(){
{add(4); add(5); add(2); add(9);}
};
System.out.println(new Operations<Double>().mean(doubles));
// System.out.println(new Operations<Double>().mean(integers));
}
}
这里是 mean
的一个示例实现,应该适用于所有数字:
public static <T extends Number> double mean(List<T> numbers)
{
double sum = 0;
for (Number n : numbers)
sum += n.doubleValue();
return sum / (double)numbers.size();
}
同样 max
可能看起来像:
public static <T extends Number> T max(List<T> numbers) {
T max = null;
for (T t : numbers) {
if (max == null || t.doubleValue() > max.doubleValue()) {
max = t;
}
}
return max;
}
测试:
@Test public void testNumbers() {
List<Double> d = Arrays.asList(4.3, 5.9, 2.3, 9.5);
System.out.println("doubles: mean=" + mean(d) + " max=" + max(d));
List<Integer> i = Arrays.asList(4, 5, 2, 9);
System.out.println("integers: mean=" + mean(i) + " max=" + max(i));
}
输出:
doubles: mean=5.5 max=9.5
integers: mean=5.0 max=9
错误点:
double is the parent of all the other number types
例如ArrayList<Integer>
不能转换为ArrayList<Double>
但是您可以尝试使用类似的东西:
public U mean(List<U> values) {
您可以从这些值中获得双倍的值。
我想创建一个 class,其中包含多个可以进行数学运算的方法。该方法应该能够接收 int、double、float、long、short 的 ArrayList。我制作了这些方法,以便它们可以接收双精度 ArrayLists,因为根据我的理解,双精度是所有其他数字类型的父级。为什么我的方法不能接收整数的 ArrayList?
这是我的代码:
import java.util.*;
import java.util.ArrayList;
class Operations <U extends Number>
{
// Function for calculating mean
public static double mean(ArrayList<Double> doubles)
{
double sum = 0;
for (int i = 0; i < doubles.size(); i++)
sum += doubles.get(i);
return (double)sum / (double)doubles.size();
}
// Function for calculating maximum value
public static double max(ArrayList<Double> doubles){
Collections.sort(doubles);
double max=0;
max=doubles.get(doubles.size()-1);
return max;
}
// Driver code
}
public class Main {
public static void main(String args[])
{
ArrayList<Double> doubles = new ArrayList<>(){
{add(4.3); add(5.9); add(2.3); add(9.5);}
};
ArrayList<Integer> integers = new ArrayList<>(){
{add(4); add(5); add(2); add(9);}
};
System.out.println(new Operations<Double>().mean(doubles));
// System.out.println(new Operations<Double>().mean(integers));
}
}
这里是 mean
的一个示例实现,应该适用于所有数字:
public static <T extends Number> double mean(List<T> numbers)
{
double sum = 0;
for (Number n : numbers)
sum += n.doubleValue();
return sum / (double)numbers.size();
}
同样 max
可能看起来像:
public static <T extends Number> T max(List<T> numbers) {
T max = null;
for (T t : numbers) {
if (max == null || t.doubleValue() > max.doubleValue()) {
max = t;
}
}
return max;
}
测试:
@Test public void testNumbers() {
List<Double> d = Arrays.asList(4.3, 5.9, 2.3, 9.5);
System.out.println("doubles: mean=" + mean(d) + " max=" + max(d));
List<Integer> i = Arrays.asList(4, 5, 2, 9);
System.out.println("integers: mean=" + mean(i) + " max=" + max(i));
}
输出:
doubles: mean=5.5 max=9.5
integers: mean=5.0 max=9
错误点:
double is the parent of all the other number types
例如ArrayList<Integer>
不能转换为ArrayList<Double>
但是您可以尝试使用类似的东西:
public U mean(List<U> values) {
您可以从这些值中获得双倍的值。