我是否计算循环中的标准偏差。我知道计算标准偏差的公式,我只想知道如何将用户输入用于计算。我是编程的新手,请解释一切。我也不介意我试图写出标准偏差公式的抱歉尝试,这不仅仅是为了更多地理解SD。
import java.util.Scanner;
public class readFromKeyboard {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String inStr = input.next();
int n;
int i;
int count = 0;
int min = Integer.MAX_VALUE;
int max = Integer.MIN_VALUE;
double average=0;
int sum;
double deviation = 0;
while (!inStr.equals("EOL")) {
count++;
n = Integer.parseInt(inStr);
min = Math.min(min, n);
max = Math.max(max, n);
System.out.printf("%d ", n);
inStr = input.next();
average += n;
// really bad attempt here
deviation = math.pow(n / average,2) ++ / mean sqrt();
}
average = average/count;
System.out.println("\n The average of these numbers is " + average);
System.out.printf("The list has %d numbers\n", count);
System.out.printf("The minimum of the list is %d\n", min);
System.out.printf("The maximum of the list is %d\n", max);
input.close();
}
}
答案 0 :(得分:0)
您的代码首先遇到一些问题:
您对average
的使用非常混乱,因为您首先将其用作累加器,然后将其除以元素数。更好的风格是使用单独的累加器变量来计算总和,然后计算for循环外的平均值。
话虽这么说,一旦计算了平均值,你就可以再次遍历你的值,并保留一个累加器变量,每个数字的增量乘以它与平均值之差的平方,沿着以下几行:
varianceSum += Math.pow(num - average, 2);
一旦所有数字相加,您可以将varianceSum
除以count
以获得方差(可能需要检查以避免除以0),并使用Math.sqrt()
查找标准差。
至于从用户那里获取输入,您需要为每个号码重复调用input.nextInt()
。您可以让用户在开头输入输入数量,然后在for循环中循环输入它们,或者您可以使用Scanner的hasNext()
方法读取直到输入结束。
答案 1 :(得分:0)
您应该在循环内调用input.next();
以重复获取用户输入。
对于记录,您可以使用in.nextInt()
而不是input.next();
,因为您在这里处理整数。您对deviation
的计算不明确。