我对 Java 还很陌生。我目前正在参加入门课程,因此我在编写程序的过程中遇到了许多错误。当我尝试使用数组时,这段代码尤其存在问题。 目标是计算并输出平均值、中值、最小值、最大值、范围和偏度。我们必须将文件保存在名为 silvestri 的包中,然后将其导入程序中以读取数字并执行上述所有数学函数。
第 57 行和第 70 行出现错误“表达式的类型必须是数组类型,但它解析为 int”
第 35 行有错误“此方法必须返回 double 类型的结果”和另一个错误消息“类型统计中的方法 range(double []) 从未在本地使用”
第 91 行有错误:“死代码”它还输出两次平均值,但不输出我的任何其他 sytem.out.println////() 语句。我做错了什么?
这是我的代码:
import java.util.Arrays;
import java.util.Scanner;
import silvestri.DataStore;
public class Statistics {
private final static String TITLE = "Statistics on an Array V1.0";
private final static String CONTINUE_PROMPT = "Do this again? [y/N] ";
//**********************************************
// Put as many methods you need here
private static double mean(double[] x) {
if (x.length == 0) {
return Double.NaN;`your text`
}
double sum = 0;
for (int i = 0; i < x.length; i++)
sum += x[i];
double mean = sum / x.length;
System.out.println("The mean is: " + mean);
return mean;
}
private static double median (double[] x) {
double median = 0;
Arrays.sort(x);
if (x.length % 2 != 0) {
median = x[x.length / 2];
System.out.println("The median is: " + median);
return median;
}
else {
median = (x[(x.length - 1) / 2] + x[x.length / 2]) / 2.0;
System.out.println("The median is: " + median);
return median;
}
}
private static double maximum (double[] x) {
double maximum = x[0];
double minimum;
for (int i = 1; i < x.length; i++) {
if (x.length[i] > maximum) {
/*error message: "the type of the expression must be an array type,
but it resolved to int"
*/
maximum = x[i];
}
}
System.out.println("The maximum is: " + maximum);
return maximum;
}
private static double minimum (double[] x) {
double maximum = x[0];
double minimum;
for (int i = 1; i < x.length; i++) {
if (x.length[i] < minimum) {
/*error message: "the type of the expression must be an array type,
but it resolved to int"
*/
minimum = x[i];
}
}
System.out.println("The minimum is: " + minimum);
return minimum;
}
private static double range (double[] x) {
/* error message: the method range(double []) must return a result of
type double
*/
//initializing maximum and minimum
double maximum = x[0];
double minimum = x[0];
double range = 0;
for (int i = 1; i < x.length; i++) {
// error message: dead code
if (x[i] > maximum) {
maximum = x[i];
}
if (x[i] < minimum) {
minimum = x[i];
}
System.out.println("The range is: " + range);
return range = maximum - minimum;
}
}
https://stackoverflow.com/
public static String skew (double[] x) {
double sum = 0;
double mean;
double median = median(x);
for (double num : x) {
sum += num;
}
mean = sum / x.length;
double difference = Math.abs(mean-median);
if (mean > median) {
return "The data is right skewed";
}
// checking if the absolute difference is within 10E-6
else if (Math.abs(difference) < 10E-6) {
return "The data has no skew";
}
else {
System.out.println("The data is left skewed");
}
}
//**********************************************
// Start your logic coding in the process method
private static void process(Scanner input, String args[]) throws Exception {
double data[] = DataStore.getData();
double mean = mean(data);
// write a method called mean that's gonna pass the array doubles & it will return average
double ave = mean(data);
}
//**********************************************
// Do not change the doThisAgain method
private static boolean doThisAgain(Scanner input, String prompt) {
System.out.print(prompt);
String doOver = input.nextLine();
return doOver.trim().equalsIgnoreCase("Y");
}
//**********************************************
// Do not change the main method
public static void main(String args[]) throws Exception {
System.out.println("Welcome to " + TITLE);
Scanner input = new Scanner(System.in);
do {
process(input, args);
} while (doThisAgain(input, CONTINUE_PROMPT));
input.close();
System.out.println("Thank you for using " + TITLE);
}
}
我尝试修复数组、双精度和字符串变量。一些代码得到了改进,但在我尝试对代码进行故障排除后,上述行出现了问题。
if (x.length[i] > maximum) {
/*error message: "the type of the expression must be an array type,
but it resolved to int"
*/
计算机编程语言包含称为“表达式”的东西。表达式返回值。表达式 x[i]
返回数组 x
中索引
i
处的元素的值,例如
x[0]
返回数组
x
中的第一个元素。表达式
x.length
返回数组
x
中的元素数量。但是,没有
x.length[i]
表达式,这就是您收到错误的原因。应该只是
x[i]
。
也来自您问题中的代码:
if (x[i] < minimum) {
/*error message: "the type of the expression must be an array type,
but it resolved to int"
*/
有时错误消息可能很神秘。这里的问题是你声明了变量
minimum
但没有初始化它。我指的是您的这行代码(在 if
语句上方出现两行):
double minimum;
我猜你希望这样:double minimum = x[0];
下一个问题。
private static double range(double[] x) {
/* error message: the method range(double []) must return a result of
type double
*/
return
语句位于for
循环内。请注意,数组可能包含零个元素,在这种情况下,
for
循环将不会被执行,这意味着该方法不会返回值。
return
语句位于for
循环内这一事实也是导致死代码
错误的原因。在
for
循环的第一次迭代中,将执行 return
语句,因此循环将执行一次迭代,因此
i++
永远不会被执行。
还有其他问题,但是如果您将下面的代码与您的代码进行比较,我相信您会发现它们是什么。
import java.util.Arrays;
import java.util.Scanner;
import silvestri.DataStore;
public class Statistics {
private final static String TITLE = "Statistics on an Array V1.0";
private final static String CONTINUE_PROMPT = "Do this again? [y/N] ";
private static double mean(double[] x) {
if (x.length == 0) {
return Double.NaN;
}
double sum = 0;
for (int i = 0; i < x.length; i++) {
sum += x[i];
}
double mean = sum / x.length;
System.out.println("The mean is: " + mean);
return mean;
}
private static double median(double[] x) {
double median = 0;
Arrays.sort(x);
if (x.length % 2 != 0) {
median = x[x.length / 2];
System.out.println("The median is: " + median);
return median;
}
else {
median = (x[(x.length - 1) / 2] + x[x.length / 2]) / 2.0;
System.out.println("The median is: " + median);
return median;
}
}
private static double maximum(double[] x) {
double maximum = x[0];
for (int i = 1; i < x.length; i++) {
if (x[i] > maximum) {
maximum = x[i];
}
}
System.out.println("The maximum is: " + maximum);
return maximum;
}
private static double minimum(double[] x) {
double minimum = x[0];
for (int i = 1; i < x.length; i++) {
if (x[i] < minimum) {
minimum = x[i];
}
}
System.out.println("The minimum is: " + minimum);
return minimum;
}
private static double range(double[] x) {
// initializing maximum and minimum
double maximum = x[0];
double minimum = x[0];
for (int i = 1; i < x.length; i++) {
if (x[i] > maximum) {
maximum = x[i];
}
if (x[i] < minimum) {
minimum = x[i];
}
}
double range = maximum - minimum;
System.out.println("The range is: " + range);
return range;
}
public static String skew(double[] x) {
double mean = mean(x);
double median = median(x);
double difference = Math.abs(mean - median);
if (mean > median) {
return "The data is right skewed";
}
// checking if the absolute difference is within 10E-6
else if (Math.abs(difference) < 10E-6) {
return "The data has no skew";
}
else {
return "The data is left skewed";
}
}
private static void process(Scanner input, String args[]) throws Exception {
double data[] = DataStore.getData();
mean(data);
median(data);
maximum(data);
minimum(data);
range(data);
System.out.println(skew(data));
}
private static boolean doThisAgain(Scanner input, String prompt) {
System.out.print(prompt);
String doOver = input.nextLine();
return doOver.trim().equalsIgnoreCase("Y");
}
public static void main(String args[]) throws Exception {
System.out.println("Welcome to " + TITLE);
Scanner input = new Scanner(System.in);
do {
process(input, args);
} while (doThisAgain(input, CONTINUE_PROMPT));
input.close();
System.out.println("Thank you for using " + TITLE);
}
}
当我使用以下数组运行上面的代码时
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
我得到以下输出
The mean is: 4.5
The median is: 4.5
The maximum is: 9.0
The minimum is: 0.0
The range is: 9.0
The mean is: 4.5
The median is: 4.5
The data has no skew
Do this again? [y/N] N
Thank you for using Statistics on an Array V1.0