Java代码对数组进行统计(使用方法),但有错误消息

问题描述 投票:0回答:1

我对 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); } }
我尝试修复数组、双精度和字符串变量。一些代码得到了改进,但在我尝试对代码进行故障排除后,上述行出现了问题。

java arrays
1个回答
0
投票
从您问题中的代码:

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


© www.soinside.com 2019 - 2024. All rights reserved.