我只是对如何存储用户输入的数字数组感到困惑。用户可以在数组中输入他们想要的数字,但它本身并不需要输入数字。
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;
}
}
答案 0 :(得分:1)
让我们从顶部开始解决错误。
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
。我不相信这个简单的数学版本是正确的。
请不要指望我再对此代码进行回合。
答案 1 :(得分:0)
我建议您先使用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;
}
}