2

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!

asked Apr 18, 2012 at 4:18
2
  • 4
    Unfortunately, there's no nice way to get around the difficulty with + and /. Probably your best bet is to pass around an object with methods plus and divide, which encapsulates the + and / logic for a specific numeric type. Commented Apr 18, 2012 at 4:21
  • if you use double (Scanner.nextDouble ), you cover all numbers. As for + and /, Adam already advised you to go with methods with suitable name. Commented Apr 18, 2012 at 4:24

1 Answer 1

2

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.

answered Apr 18, 2012 at 4:28
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.