-
Geometric Mean
Hi folks, can anyone help me with a problem?
I have a class below to work out the average of a series of numbers. Can anyone give me a clue on how to extend this example so that it also prints the geometric mean of the numbers. The geometric mean of n numbers is the n-th root of their product. Using
the Math.pow function to calculate the n-th root.
All hints, solutions appreciated. code below:
// Average
// Accept a series of numbers and display average (0 ends input and does not count)
import javax.swing.JOptionPane; // Required for Windows boxes
public class Average
{
public static void main(String args[])
{
// Declare variables
int[] digit = new int[100];
int[] nums;
String input = "";
String output = "";
int count = 0;
int index = 9;
int amount = 0;
int sum = 0;
int avg = 0;
// Request input
while(index != 0)
{
input = JOptionPane.showInputDialog(null, "Enter an Integer", "Average Calculator", JOptionPane.QUESTION_MESSAGE);
index = Integer.parseInt(input);
digit[count] = index;
count++;
}
// Calculate average
for (count = 0; count < digit.length; count++) // for every element in digit[]
{
if (digit[count] > 0) // only if not equal to 0
{
amount++; // running total of live numbers
}
}
nums = new int[amount]; // assign new length to hold stored numbers
for (int i = 0; i < nums.length; i++)
{
nums[i] = digit[i]; // transfer only live values
sum += nums[i]; // get total of live values
}
if(amount > 0) // don't divide by zero pc wont like it!
{
avg = (sum / amount); // Finally get the average integer
}
else
{
JOptionPane.showMessageDialog(null, "You Just Entered 0", "Nothing to calculate", JOptionPane.ERROR_MESSAGE);
System.exit(0); // Break out of program
}
// Create output
output = "The sum of the integers you entered is: " + sum + "\nThe average integer you entered is: " + avg;
// Output result
JOptionPane.showMessageDialog(null, output, "Average Calculator", JOptionPane.INFORMATION_MESSAGE);
// End program
System.exit(0);
}
}
-
well if i understand the geometric mean correctly, then something like this should be ok
Code:
noOfNumbers = //get the number of numbers entered
double multiplyResult = 1.0;
double geoMean;
//this will multiply all numbers entered in by user
for(int i=0;i<digit.length;i++){
multiplyResult = multiplyResult*digit[i];
}
geoMean = Math.pow(multiplyResult, (1/noOfNumbers));
this is NOT tested, just an idea about how to go about it, you could change the code all you want, but it should be on the right track
A kram a day keeps the doctor......guessing
-
Kram Kram your the man if you cant do it no one can
Cheers pal.
haven't had time to test it yet but looks logical.
-- Life is so much easier when someone else has the answer --
-
A kram a day keeps the doctor......guessing
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
Forum Rules
|
Top DevX Stories
Easy Web Services with SQL Server 2005 HTTP Endpoints
JavaOne 2005: Java Platform Roadmap Focuses on Ease of Development, Sun Focuses on the "Free" in F.O.S.S.
Wed Yourself to UML with the Power of Associations
Microsoft to Add AJAX Capabilities to ASP.NET
IBM's Cloudscape Versus MySQL
|
Bookmarks