使用循环查找均值和标准差
Find mean and standard deviation using loops
我的目标是计算从用户输入中获得的 10 个数字的均值 和标准差。
我在 class.
中只学习了 while 循环
问题:
我如何将每个用户输入(在循环内)分配给一个单独的变量,以便稍后与平均值进行比较,找出标准偏差?
(我的class中没有教过数组,所以,我必须不使用数组来解决这个问题)
我用很长很乏味的方式完成了这个程序,但如果需要的话可以提供更多代码来证明我可以做 while 循环来找到均值。
import java.util.Scanner;
public class StandardDev
{
public static void main (String[] args)
{
Scanner input = new Scanner (System.in);
double num1 = 0, num2 = 0, num3 = 0, num4 = 0, num5 = 0, num6 = 0, num7 = 0, num8 = 0, num9 = 0, num10 = 0, total = 0, mean = 0, stDev1 = 0, stDev2 = 0, sum = 0;
System.out.println("Enter 10 numbers: ");
num1 = input.nextDouble();
num2 = input.nextDouble();
num3 = input.nextDouble();
num4 = input.nextDouble();
num5 = input.nextDouble();
num6 = input.nextDouble();
num7 = input.nextDouble();
num8 = input.nextDouble();
num9 = input.nextDouble();
num10 = input.nextDouble();
sum = num1+num2+num3+num4+num5+num6+num7+num8+num9+num10;
mean = sum / (double) 10;
stDev1 = Math.pow(num1 - mean, 2) + Math.pow(num2 - mean, 2) + Math.pow(num3 - mean, 2) + Math.pow(num4 - mean, 2) + Math.pow(num5 - mean, 2) +
Math.pow(num6 - mean, 2) + Math.pow(num7 - mean, 2) + Math.pow(num8 - mean, 2) + Math.pow(num9 - mean, 2) + Math.pow(num10 - mean, 2);
stDev2 = Math.sqrt(stDev1 / 10);
System.out.println ("The mean is " + mean + ".");
System.out.println ("The standard deviation is " + stDev2 + ".");
}
}
这是我找到平均值的方法。我的逻辑告诉我,如果我可以单独访问这些输入以从均值和平方中减去,我只能找到标准偏差。不知道怎么样..
import java.util.Scanner;
public class JTillman03_45
{
public static void main (String[] args)
{
Scanner input = new Scanner (System.in);
int count = 0, total = 0;
double mean, stDev = 0;
System.out.println("Enter a digit: ");
int number = input.nextInt();
while (count < 9){
total += number;
count++;
System.out.println("Enter a digit: ");
number = input.nextInt();
}
mean = total / (double) count;
System.out.println("The mean of those numbers is: " + mean);
System.out.println("The standard deviation of those numbers is: " + stDev);
}
}
使用while
循环,迭代input.nextDouble()
的值作为循环的条件。只要有输入,循环就会继续。同时,记录输入的数量和数字的总和。只需使用这 2 个数字,您就可以计算平均值和标准偏差。如果您查看 stDev1
,您会发现它只是数字之和减去均值乘以 10(或输入计数)。平均值只是总和除以输入计数。如果您需要更多解释,请告诉我。我将很快添加一些示例代码。
public class StandardDev {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (input.hasNext()) {
sum += input.nextDouble();
count++;
}
mean = sum / count;
stdDev = sum - (count * mean);
System.out.println("The mean is " + mean + ".");
System.out.println("The standard deviation is " + stdDev + ".");
}
}
要对 10 个用户输入的数字求和,您可以仅使用一个变量和 += 运算符来跟踪总和。不需要那么多变量,这就是循环的作用!例如,
double sum = 0;
Scanner input = new Scanner (System.in);
int counter = 1;
System.out.println("Enter 10 numbers: ");
//adds up 10 user-inputted numbers
while(counter <= 10){
sum += input.nextDouble();
//how the loop will end after 10th iteration
counter++;
}
double mean = sum/10; //no need for double cast here since sum is a double
如果没有数组,就很难使用循环来计算标准差,因为我们需要访问各个数字才能找到标准差。因此,您的解决方案确实是唯一的方法,除非我们让用户使用类似于上面的 while 循环再次输入相同的 10 个数字来查找方差。例如,
//reset counter
counter = 1;
double variance = 0;
System.out.println("Enter 10 numbers: ");
while(counter <= 10){
variance += Math.pow(input.nextDouble()-mean,2);
counter++;
}
double stdDev = Math.sqrt(variance/10);
System.out.println ("The mean is " + mean + ".");
System.out.println ("The standard deviation is " + stdDev + ".");
这是带循环的更新代码。
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
double sum = 0;
double sqSum = 0;
System.out.println("Enter 10 numbers: separte by space");
for ( int i = 0 ; i < 10 ; i++){
double val = input.nextDouble();
sum += val;
sqSum += val * val;
}
double mean = sum / 10;
double stdDev = sqSum / 10 - mean * mean;
System.out.println("The mean is " + mean + ".");
System.out.println("The standard deviation is " + stdDev + ".");
}
你真的需要存储所有的整数吗?如果不是,您可以使用以下三个值计算平均值和标准偏差:
- 输入了多少个数字(在你的问题中,它是一个固定值10)。
- 所有数字的总和。
- 数字的平方和。
给出
double count = 10.0; // is 10.0 for your problem
double sum1 = 0.0; // sum of the numbers
double sum2 = 0.0; // sum of the squares
int i;
for (i=0; i < 10; i++) {
System.out.println("Enter 10 numbers: ");
double n = input.nextDouble();
sum1 += n;
sum2 += n * n;
}
double average = sum1 / count;
double variance = (count * sum2 - sum1 * sum1) / (count * count);
double stdev = Math.sqrt(variance);
我的目标是计算从用户输入中获得的 10 个数字的均值 和标准差。
我在 class.
中只学习了 while 循环问题: 我如何将每个用户输入(在循环内)分配给一个单独的变量,以便稍后与平均值进行比较,找出标准偏差?
(我的class中没有教过数组,所以,我必须不使用数组来解决这个问题)
我用很长很乏味的方式完成了这个程序,但如果需要的话可以提供更多代码来证明我可以做 while 循环来找到均值。
import java.util.Scanner;
public class StandardDev
{
public static void main (String[] args)
{
Scanner input = new Scanner (System.in);
double num1 = 0, num2 = 0, num3 = 0, num4 = 0, num5 = 0, num6 = 0, num7 = 0, num8 = 0, num9 = 0, num10 = 0, total = 0, mean = 0, stDev1 = 0, stDev2 = 0, sum = 0;
System.out.println("Enter 10 numbers: ");
num1 = input.nextDouble();
num2 = input.nextDouble();
num3 = input.nextDouble();
num4 = input.nextDouble();
num5 = input.nextDouble();
num6 = input.nextDouble();
num7 = input.nextDouble();
num8 = input.nextDouble();
num9 = input.nextDouble();
num10 = input.nextDouble();
sum = num1+num2+num3+num4+num5+num6+num7+num8+num9+num10;
mean = sum / (double) 10;
stDev1 = Math.pow(num1 - mean, 2) + Math.pow(num2 - mean, 2) + Math.pow(num3 - mean, 2) + Math.pow(num4 - mean, 2) + Math.pow(num5 - mean, 2) +
Math.pow(num6 - mean, 2) + Math.pow(num7 - mean, 2) + Math.pow(num8 - mean, 2) + Math.pow(num9 - mean, 2) + Math.pow(num10 - mean, 2);
stDev2 = Math.sqrt(stDev1 / 10);
System.out.println ("The mean is " + mean + ".");
System.out.println ("The standard deviation is " + stDev2 + ".");
}
}
这是我找到平均值的方法。我的逻辑告诉我,如果我可以单独访问这些输入以从均值和平方中减去,我只能找到标准偏差。不知道怎么样..
import java.util.Scanner;
public class JTillman03_45
{
public static void main (String[] args)
{
Scanner input = new Scanner (System.in);
int count = 0, total = 0;
double mean, stDev = 0;
System.out.println("Enter a digit: ");
int number = input.nextInt();
while (count < 9){
total += number;
count++;
System.out.println("Enter a digit: ");
number = input.nextInt();
}
mean = total / (double) count;
System.out.println("The mean of those numbers is: " + mean);
System.out.println("The standard deviation of those numbers is: " + stDev);
}
}
使用while
循环,迭代input.nextDouble()
的值作为循环的条件。只要有输入,循环就会继续。同时,记录输入的数量和数字的总和。只需使用这 2 个数字,您就可以计算平均值和标准偏差。如果您查看 stDev1
,您会发现它只是数字之和减去均值乘以 10(或输入计数)。平均值只是总和除以输入计数。如果您需要更多解释,请告诉我。我将很快添加一些示例代码。
public class StandardDev {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
while (input.hasNext()) {
sum += input.nextDouble();
count++;
}
mean = sum / count;
stdDev = sum - (count * mean);
System.out.println("The mean is " + mean + ".");
System.out.println("The standard deviation is " + stdDev + ".");
}
}
要对 10 个用户输入的数字求和,您可以仅使用一个变量和 += 运算符来跟踪总和。不需要那么多变量,这就是循环的作用!例如,
double sum = 0;
Scanner input = new Scanner (System.in);
int counter = 1;
System.out.println("Enter 10 numbers: ");
//adds up 10 user-inputted numbers
while(counter <= 10){
sum += input.nextDouble();
//how the loop will end after 10th iteration
counter++;
}
double mean = sum/10; //no need for double cast here since sum is a double
如果没有数组,就很难使用循环来计算标准差,因为我们需要访问各个数字才能找到标准差。因此,您的解决方案确实是唯一的方法,除非我们让用户使用类似于上面的 while 循环再次输入相同的 10 个数字来查找方差。例如,
//reset counter
counter = 1;
double variance = 0;
System.out.println("Enter 10 numbers: ");
while(counter <= 10){
variance += Math.pow(input.nextDouble()-mean,2);
counter++;
}
double stdDev = Math.sqrt(variance/10);
System.out.println ("The mean is " + mean + ".");
System.out.println ("The standard deviation is " + stdDev + ".");
这是带循环的更新代码。
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
double sum = 0;
double sqSum = 0;
System.out.println("Enter 10 numbers: separte by space");
for ( int i = 0 ; i < 10 ; i++){
double val = input.nextDouble();
sum += val;
sqSum += val * val;
}
double mean = sum / 10;
double stdDev = sqSum / 10 - mean * mean;
System.out.println("The mean is " + mean + ".");
System.out.println("The standard deviation is " + stdDev + ".");
}
你真的需要存储所有的整数吗?如果不是,您可以使用以下三个值计算平均值和标准偏差:
- 输入了多少个数字(在你的问题中,它是一个固定值10)。
- 所有数字的总和。
- 数字的平方和。
给出
double count = 10.0; // is 10.0 for your problem
double sum1 = 0.0; // sum of the numbers
double sum2 = 0.0; // sum of the squares
int i;
for (i=0; i < 10; i++) {
System.out.println("Enter 10 numbers: ");
double n = input.nextDouble();
sum1 += n;
sum2 += n * n;
}
double average = sum1 / count;
double variance = (count * sum2 - sum1 * sum1) / (count * count);
double stdev = Math.sqrt(variance);