I am new to programming and I am trying to figure out a simple average function. I have written a function to average 3 integers. Now I would like to be able to use any collection class and any number class and get the average. The problem is with these classes you can't use + or / to get the average.
So I am wondering if there are any work-arounds to be able to use these two classes?
here is my first function that works:
package refresh;
import java.util.*;
public class Average {
public static void main( String args[]){
int a, b, c;
float average;
Scanner scanner = new Scanner(System.in);
System.out.println("Enter First Number");
a = scanner.nextInt();
System.out.println("Enter Second Number");
b = scanner.nextInt();
System.out.println("Enter Third Number");
c = scanner.nextInt();
average = (float)(a+b+c)/3;
System.out.println("The Average Is "+average );
}
}
Here what I have so far for my problem:
package refresh;
import java.util.*;
public class Average {
public static void main( String args[]){
Collection numbers;
Number count;
Number average;
Scanner scanner = new Scanner(System.in);
System.out.println("Enter Numbers to be averaged");
numbers = (Collection) scanner.match();
count++;
average = numbers/count;
System.out.println("The Average Is "+average);
}
}
Any help would be great! Thanks for your time!
解决方案
It makes no sense to convert a String into a number (which is what Scanner does) if you don't know what kind of number you're trying to convert it into.
You can represent pretty much any number as a Double. If you need arbitrary precision, use BigDecimal.
The averaging code can be fully generic over the Number interface; just use the doubleValue method. If you need BigDecimal, then it's more complicated and you probably need to do things involving instanceof.