在我能找到的所有其他情况中,这是由于代码不在方法或不正确的包围,但我检查了所有这些。我的代码就是这个;
import java.util.*;
public class averages {
public static void main(String[] args)
{
//initializing
double mean = 0;
double deviation = 0;
int i = 0;
double dataset = new double[10];
double sum = 0;
double subdev = 0;
double subsum = 0;
double dev = 0;
//getting the numbers
for (i = 0; i <= 9 ; i++)
{
Scanner input = new Scanner(System.in);
System.out.println("Enter a number");
dataset[i] = input.nextDouble();
}
//calling the function to get
avgarray(dataset[]);
System.out.println("Average is " + mean);
devequasion(dataset[]);
System.out.println("Deviation is " + subdev);
}
public static double avgarray(double[] arraydata)
{
sum = 0;
for (i = 0; i <= 9 ; i++)
{
sum += arraydata[i];
}
mean = sum / 10;
return mean;
}
public static double devequasion(double[] devdata)
{
subsum = 0;
for (i = 0; i <= 9 ; i++)
{
subsum += devdata[i]*devdata[i];
}
dev = math.sqrt((sum - avgarray(devdata[]))/ 9.0);
return dev;
}
}
一切看起来都是正确的,但错误不会消失。
答案 0 :(得分:3)
你有很多问题,例如:
dataset[]
而不是dataset
。avgarray
和devequasion
中使用但未声明的变量(mean
,sum
,subsum
,i
,{ {1}})。这些在dev
中声明的事实无关紧要。main
中不需要它们,其他main
当然不需要。i
。java.util.Scanner
,首都为Math
。如果您使用像Eclipse这样的IDE,您会发现更容易查看和修复这些问题。对于初学者来说,这是一个M
。
如果必须(无头构建,兼容性等),请务必将代码泵入${DEITY}-send
作为最后一步,但是使用IDE执行初始开发我会更快地找到很多。
这是一个修正了所有语法问题的版本,以及其他一些小的调整,例如删除不必要的变量:
javac
如果是家庭作业,请不要逐字逐句地使用,如果你的教育工作者没有积极地在网上搜索剽窃,你就是愚蠢的。
答案 1 :(得分:0)
问题之一是
double dataset = new double[10];
应该是
double[] dataset = new double[10];
另外
avgarray(dataset[]);
应该是
avgarray(dataset);
答案 2 :(得分:0)
我知道这不是一个修复我的代码板,但是有太多错误让我指出并告诉你在哪里以及如何修复它们。修复和发布整个代码并在大量错误旁边添加注释更容易。您需要了解变量具有范围。
import java.util.*;
public class averages {
public static void main(String[] args)
{
//initializing
double dataset[] = new double[10]; // FIXED (added [])
//getting the numbers
for (int i = 0; i <= 9 ; i++)
{
Scanner input = new Scanner(System.in);
System.out.println("Enter a number");
dataset[i] = input.nextDouble();
}
//calling the function to get
avgarray(dataset); // FIXED (removed [])
System.out.println("Average is " + avgarray(dataset)); // FIXED (calls avgarray)
devequasion(dataset);
System.out.println("Deviation is " + devequasion(dataset)); // FIXED (calls devequasion)
}
public static double avgarray(double[] arraydata)
{
double sum = 0; // FIXED (sum wasn't declared)
for (int i = 0; i <= 9 ; i++) // FIXED (i wasn't declared)
{
sum += arraydata[i];
}
double mean = sum / 10;
return mean;
}
public static double devequasion(double[] devdata)
{
double subsum = 0; // FIXED (declared subsum)
for (int i = 0; i <= 9 ; i++) // FIXED (declared i)
{
subsum += devdata[i]*devdata[i];
}
// FIXED (removed [], declared dev, changed "sum" to "subsum", "math" to "Math")
double dev = Math.sqrt((subsum - avgarray(devdata))/ 9.0);
return dev;
}
}
这将使其编译,任何破坏的逻辑都取决于你。
编辑:抱歉,我不小心在剪贴板上发布了一个不完整的版本,现在修复了。
EDIT2:还值得一提的是,您应该在for循环中使用array.length
,而不是在这些值中进行硬编码。另外,对于循环特定次数,i = 0; i
< 10
似乎更清楚,您希望迭代10次而不是i <= 9
。
答案 3 :(得分:0)
您的代码似乎有3个主要问题:
我不确定哪一个是您要问的主要问题,但这里有......
有些事情可能是你已经知道的事情,但我从一开始就开始确保我不会跳过你错过的那一天
数组是固定大小的值序列。
所以double[10]
是一个数组,有10个值,每个值都为double
类型
但double
本身不是数组,它是double
类型的单个值。
所以这一行:
double dataset = new double[10];
没有意义。你说的是名为dataset
的变量是一个double,但是你试着把一个双精度数组放到那个变量中。这不起作用。
您希望数据集是一个数组,或者您希望它是单个值,但它不能同时存在。 可能你想要
double[] dataset = new double[10];
稍后,你有这样的行:
avgarray(dataset[]);
devequasion(dataset[]);
这些行不是有效的Java代码 - 看起来你正试图解决将dataset
声明为错误类型的问题,但是你的解决方法不正确。
如果您将数据集的声明更改为double[]
,那么您可以简单地使用
avgarray(dataset);
devequasion(dataset);
它会做你想要的。
在Java中,每个变量都有范围。范围定义变量存在的时间长度以及可以使用的位置。
因此,举例来说,您在sum
方法中声明了main
。这意味着此变量的范围仅限于该方法内部。您不能在另一个方法中使用它(要么获取值,要么设置值) - 即使从main
调用其他方法也是如此。这意味着您的avgarray
方法内有
sum = 0;
那是错的。你不能这样做,因为此方法中不存在sum。
您需要从sum
删除main
的声明(因为您从未在main中使用过它),而是在avgarray
中声明它。
你有一些需要这种治疗的变量。
在某些情况下,您在两种不同的方法中使用相同的变量。为此,您需要使变量成为类的成员,而不是方法。
因此,作为一个例子,如果你想要两个方法来使用mean
变量,那么它应该是一个像这样声明的成员变量:
public class averages
{
private static double mean = 0;
public static void main(String[] args)
{
// ...
但是,这可能不是你正在做的事情的正确方法。
如果您查看avgarray
方法,就会发现返回类型为double
public static double/ avgarray(double[] arraydata)
并在方法内正确return mean;
但是当你调用它avgarray(dataset);
时,你不会看到返回值。
您要做的是将 2个变量称为“mean”。一个在main
内,一个在avgarray
内。由于Java的范围规则,它们是完全不同的变量,恰好具有相同的名称。
如果您这样做,那么您可以写
public static void main(String[] args)
{
// ....
double mean = avgarray(dataset);
// ....
}
public static double avgarray(double arraydata)
{
// ...
double mean = sum/10;
return mean;
}
鉴于其他一些答案为您提供了修复其中一些问题的代码版本,您应该能够将我的解释和修复后的所有内容拼凑在一起。
祝你好运!