Write a generic class, MyNumberList, with a type parameter T where T is a numeri
ID: 3677354 • Letter: W
Question
Write a generic class, MyNumberList, with a type parameter T where T is a numeric object type (e.g. Integer, Double, or any class that extends java.lang.Number). The class has an ArrayList of T type as instance variable. Provide a constructor and a method named average that returns as a double the average of the values in the ArrayList.
Sample main method:
public static void main(String[] args) {
MyNumberList <Double> dLists;
MyNumberList <Integer> iLists;
double [] dArr = {1.1, 2.2, 3.3, 4.4, 5.5};
int [] iArr = {1, 2, 3, 4, 5, 6};
ArrayList al = new ArrayList ();
for (int i=0; i < dArr.length; i++) {
al.add(dArr[i]);
}
dLists = new MyNumberList <Double> (al);
System.out.println("Double average: " + dLists.average());
al.clear();
for (int i=0; i < iArr.length; i++) {
al.add(iArr[i]);
}
iLists = new MyNumberList <Integer> (al);
System.out.println("Integer average: " + iLists.average());
}
Explanation / Answer
/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class GenericArrayListDemo
{
public static void main(String[] args) {
MyNumberList<Double> dLists;
MyNumberList<Integer> iLists;
double [] dArr = {1.1, 2.2, 3.3, 4.4, 5.5};
int [] iArr = {1, 2, 3, 4, 5, 6};
ArrayList al = new ArrayList ();
for (int i=0; i < dArr.length; i++) {
al.add(dArr[i]);
}
dLists = new MyNumberList <Double> (al);
System.out.println("Double average: " + dLists.average());
al.clear();
for (int i=0; i < iArr.length; i++) {
al.add(iArr[i]);
}
iLists = new MyNumberList <Integer> (al);
System.out.println("Integer average: " + iLists.average());
}
public static class MyNumberList<T extends Number>
{
// Fields
private List<T> elements;
private Object avg;
// Constructor
@SuppressWarnings("unchecked")
public MyNumberList(List<T> elements)
{
this.elements = elements;
T sample = elements.get(0);
if(sample instanceof Double)
{
doavgDouble((List<Double>) elements);
}
else if (sample instanceof Integer)
{
doavgInt((List<Integer>) elements);
}
else if (sample instanceof Float)
{
doavgFloat((List<Float>) elements);
}
else
{
throw new IllegalStateException("Constructor must be initialiez with either of Double, Int or Float list");
}
}
// Methods
private void doavgDouble(List<Double> elements) {
Double sum = new Double(0);
for(Double d : elements)
{
sum += d;
}
avg = sum/new Double(elements.size());
}
private void doavgInt(List<Integer> elements) {
Integer sum = new Integer(0);
for(Integer d : elements)
{
sum += d;
}
avg = sum/new Integer(elements.size());
}
private void doavgFloat(List<Float> elements) {
Float sum = new Float(0);
for(Float d : elements)
{
sum += d;
}
avg = sum/new Float(elements.size());
}
Object average()
{
return avg;
}
}
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.