我需要练习语法。我有一系列数字,这是找到平均值,报告最高数字和报告最低数字的方法。要报告最高/最低数字,我将对数组进行排序。 但首先我的问题是报告平均值。我想如果我能理解那部分,那么最小/最大将没有问题。我已经尝试将其更改为Driver.randomArray []。getAverage()。
有什么建议吗?提前致谢。 〜晶体
错误代码:
线程“main”中的异常java.lang.Error:未解决的编译问题: randomArray无法解析为某种类型 类无法解析为类型 语法错误,插入“.class”以完成表达式
在IntegerArray.main(IntegerArray.java:48)
它指的是我试图从这一行调用平均值,
的System.out.println(randomArray [] getAverage());
首先,驱动程序类
import java.util.Arrays;
public class Driver {
private static final int MAX = 0;
public Driver(){
int[] randomArray = new int [MAX];
int sum;
final int MAX;
}
public int getAverage(){
for (int index = 0; index < MAX; index++){
int sum = 0;
int[] randomArray = null;
int average;
sum = sum + randomArray[index];
average = sum/MAX;
return average;}
}
public void sortArray(){
// sort the array from smallest to biggest
int[] randomArray;
Arrays.sort(randomArray);
System.out.println("The sorted array from smallest to biggest is:");
for (int number : randomArray) {
System.out.println( + number)}
}
public int getMin(){
int[] randomArray;
// find the lowest number
return randomArray[0];
}
public int getMax(){
int[] randomArray;
// find the highest number
return randomArray[MAX];
}
}
然后我的主要课程:
import java.util.Random;
import java.lang.reflect.Array;
import java.util.Arrays;
public class IntegerArray {
public static void main (String[] args) {
// set up the constant for the size of the array
final int MAX = 10;
int sum = 0;
int average = 0;
int[] randomArray = new int [MAX];
for (int index = 0; index < MAX; index++)
// values of the array go from 0-10
randomArray[index] = (int) (Math.random() *10);
// prints the array
for (int value : randomArray)
System.out.println (value);
System.out.println("The length of the array is: " + randomArray.length);
System.out.println(randomArray[].getAverage());
}
}
答案 0 :(得分:1)
您创建方法的方式,例如。 getAverage()你不能在你创建的数组上调用它。另一方面,您可以在您创建的Driver对象上调用它们。例如:Driver driver = new Driver(); System.out.println(driver.getAverage());
如果你想在Array对象上调用它们,你应该在Array类上添加它们(但这是比它更高级的Java)。
在Java Code中你需要添加一个;在声明不要忘记它们之后;)。您的IDE应该向您发出警告。
创建getMax()方法时,应将数组添加为参数。这样该方法就知道它应该获得最大数量的Array对象。例如:
public int getMax(int [] randomArray){ //找到最高的数字 return randomArray [MAX]; }
这适用于所有方法。
我希望这可以解决你的一些答案,如果不是,请添加评论或其他内容。
所以这是你的代码:
驱动程序类:
import java.util.Arrays;
public class Driver {
private static final int MAX = 0;
public Driver() {
int[] randomArray = new int[MAX];
int sum;
final int MAX;
}
public int getAverage() {
int average = 0;
for (int index = 0; index < MAX; index++) {
int sum = 0;
int[] randomArray = null;
sum = sum + randomArray[index];
average = sum / MAX;
}
return average;
}
public void sortArray(int[] randomArray) {
// sort the array from smallest to biggest
Arrays.sort(randomArray);
System.out.println("The sorted array from smallest to biggest is:");
for (int number : randomArray) {
System.out.println(+number);
}
}
public int getMin(int[] randomArray) {
// find the lowest number
return randomArray[0];
}
public int getMax(int[] randomArray) {
// find the highest number
return randomArray[MAX];
}
}
IntegerArray类:
public class IntegerArray {
public static void main(String[] args) {
// set up the constant for the size of the array
final int MAX = 10;
int sum = 0;
int average = 0;
int[] randomArray = new int[MAX];
for (int index = 0; index < MAX; index++)
// values of the array go from 0-10
randomArray[index] = (int) (Math.random() * 10);
// prints the array
for (int value : randomArray)
System.out.println(value);
System.out.println("The length of the array is: " + randomArray.length);
Driver driver = new Driver();
System.out.println(driver.getAverage());
}
}
回复评论中的问题:
您应该使用getAverage方法将randomArray作为参数,以便方法知道它应该在哪个数组上运行,例如:driver.getAverage(randomArray);
您的getAverage方法也存在一些缺陷:
1.你的sum变量应该在循环之外,否则你每次在循环内迭代时都要将总和设置为0。
2. int[] randomArray = null;
你根本不应该真正做这一行,这一行将创建一个NEW int数组并将其值设置为null,同时你应该使用你提供的int数组作为参数。
所以你的getAverage方法变为:
public int getAverage(int[] randomArray) {
int sum = 0;
for (int index = 0; index < randomArray.length; index++) {
sum = sum + randomArray[index];
}
int average = sum / randomArray.length;
return average;
}
答案 1 :(得分:0)
目前您的主类根本没有引用Driver,因此无法调用您的代码。
System.out.println(randomArray[].getAverage());
在这一行上,randomArray仍然只是一个整数数组(int[] randomArray = ...
)。
您需要创建一个Driver实例,传入您想要使用的任何数组,然后对其进行.getAverage()
。
答案 2 :(得分:0)
randomArray为null,您尝试从空数组中读取。 您需要将randomArray定义为类成员,而不是所有函数中的局部变量。 函数内部的局部变量不能在函数结束时立即使用,并且在其他函数中使用相同的名称也无济于事。 也: 在循环之前定义sum和average。循环后计算并返回平均值。
答案 3 :(得分:0)
除其他事项外,您的主要问题似乎是对scope rules的基本误解。例如:
void method () {
int someVariable;
}
void method2 () {
someVariable = 2; // <-- Error.
}
在该代码中,someVariable
是method
的本地代码,并且在其外部不可用。您无法在method2
中访问它。
我建议您不仅要阅读上述范围规则链接,还要阅读member variables上的官方教程,其中也介绍了范围。那里的信息将帮助您制定最终战略。
在您的具体情况下,您最合理的两个选择是:
randomArray
作为班级的成员字段(请参阅上面的链接)。randomArray
作为参数传递给各种方法(例如,作为getAverage
的参数,另请参阅passing information to a method上的官方教程。)您还有其他一些问题,其中一些问题在此处提到,但我认为这是您的主要困惑。阅读官方教程(上面的docs.oracle.com链接),它们简洁而且写得很好,并且会填写一些缺失概念的空白。在你这样做之后,再试一次。
顺便说一句,关于编译器错误:
System.out.println(randomArray[].getAverage());
不幸的是randomArray[].getAverage()
根本没有足够的理由来证明编译器如何解释它的完整解释,所以说:不,这是错的。 :)
您需要查看上面提到的“将信息传递给方法”教程,因为看起来您正试图表达这样的内容(上面的选项2):
int getAverage (int randomArray[]) {
...
}
System.out.println(getAverage(randomArray));
暂且不说:请注意,一堆整数的平均值本身不一定是整数(1和2的平均值是1.5)。您可以考虑计算并返回float
或double
。