我只是困惑如何存储用户的输入数字的数组。用户可以输入自己有多少数量要在阵列中,但它不要求数字本身。
import java.util.Scanner;
public class Exercise_0_2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("How many numbers: ");
int n = input.nextInt();
System.out.println("Enter " + n + " numbers : ");
double[] numbers = new double[n];
//Call and print methods
System.out.println("Mean: " + mean(numbers, n));
System.out.println("Standard Deviation: " + deviation(numbers, n));
}
// Calculate Mean
public static double mean(double[] numbers, int n) {
double sum = 0;
for (int i = 0; i < n; i++) {
sum += numbers[i];
}
double mean = sum / n;
return mean;
}
//Calculate deviation from the mean
public static double deviation(double[] numbers, int n) {
double mean = mean(numbers, n);
double sqSum = 0;
for (int i = 0; i < n; i++) {
sqSum += numbers[i] * numbers[i];
}
double variance = sqSum / n - mean * mean;
double sd = Math.sqrt(variance);
return sd;
}
}
让我们从顶部走在错误。
int arr[] = new int[(int) n];
此时n
还没有宣布,所以你不能在这里使用它。只是arr
的声明移到声明和从扫描仪读取n
后。顺便考虑int
键入n
。 double
并没有真正意义。
System.out.println("Mean: " + mean);
如果这被认为是该方法mean
一个电话,你需要把方法名称后括号和必需的参数中括号,如mean(arr)
。 mean(arr)
仍然无法工作,因为arr
已键入int[]
而该方法需要键入double[]
。我不能告诉你正确的解决办法是什么在这里,因为我不知道你是否意味着外部或方法中读出的数字。外面的人似乎更自然的我。
System.out.println("Enter" + n + " numbers: ");
因为它是在n
方法的局部变量不能在这里使用的变量main
。再说我不知道你需要它,如果你打算在其他地方阅读的数字,并通过填充阵列到方法。
array[i] = input.nextDouble();
两个错误在这里:你不必叫array1
数组变量。你可能意味着numbers
,我不知道。而且,由于它是在input
方法的局部变量(同样的问题与main
以上),你不能在这里使用的变量n
。任一声明它的静态字段,而不是,或者它作为参数传递到方法中。
在deviation
方法的错误是相似的,所以我不会重复。
因为据我所知,这应该是你的一个锻炼,我不打算为您解决和剥夺你的学习。我希望你得到一个或两个一步。
有你的问题的编辑一些细微的改进。你似乎仍然没有来决定是否在main
或mean
阅读的数字?
System.out.println("Mean: " + mean(numbers, n));
没有你的numbers
方法声明的变量main
(以下行同样的问题)。否则罚款。
sum += a[i];
你可能意味着meanSum
和numbers
?或者,也许你的意思是声明,而不是sum
的meanSum
环以上for
?
有一个正确的花括号上面一行结束第一循环for
后失踪。
double dqDiff = 0;
简单的拼写错误:你指的是这个变量作为sqDiff
以后,所以需要在此处的声明使用相同的拼写。
return Math.sqrt(mean(number, n));
失踪s
numbers
。我不相信,数学的这个简单的版本是正确的。
请不要指望我能承担这个代码的任何更多轮。
我可以建议先使用ArrayList
代替array[]
的,在这种情况下,你没有来表示数字的数量(n)和可以自由进入这么多的数字,只要你愿意。其次,使用try-catch块停止输入数字和计算的初始化。例如:
public class MeanAndDeviation {
public static void main(String[] args) {
Scanner scn = new Scanner(System.in);
System.out.println("Enter the numbers then press any letter to calculate Mean and Sd");
/*Use an ArrayList to freely enter so much numbers as you need*/
ArrayList <Double> arr = new ArrayList <>();
/*Use try-catch block to start calculations by entering any letter*/
try {
while (scn.hasNext()) {
double i = scn.nextDouble();
arr.add(i);
}
}
/*Use catch (Exception e) to catch any type of exceptions*/
catch (Exception e) {}
System.out.println(arr + "\nMean: " + mean(arr) +
"\nStandard Deviation: " + deviation(arr));
}
private static double mean(ArrayList<Double> arr) {
double sum = 0;
for (int i = 0; i < arr.size(); i++) {
sum += arr.get(i);}
double mean = sum/arr.size();
return mean;
}
private static double deviation (ArrayList<Double> arr) {
double sumOfDiff = 0;
for (int i = 0; i < arr.size(); i++) {
sumOfDiff += Math.pow(arr.get(i) - mean(arr), 2);
}
double deviation = Math.sqrt(sumOfDiff/arr.size());
return deviation;
}
}