使用驱动程序

时间:2017-03-12 01:03:39

标签: java arrays

我需要练习语法。我有一系列数字,这是找到平均值,报告最高数字和报告最低数字的方法。要报告最高/最低数字,我将对数组进行排序。 但首先我的问题是报告平均值。我想如果我能理解那部分,那么最小/最大将没有问题。我已经尝试将其更改为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());









        }

    }

4 个答案:

答案 0 :(得分:1)

  1. 您创建方法的方式,例如。 getAverage()你不能在你创建的数组上调用它。另一方面,您可以在您创建的Driver对象上调用它们。例如:Driver driver = new Driver(); System.out.println(driver.getAverage());如果你想在Array对象上调用它们,你应该在Array类上添加它们(但这是比它更高级的Java)。

  2. 在Java Code中你需要添加一个;在声明不要忘记它们之后;)。您的IDE应该向您发出警告。

  3. 创建getMax()方法时,应将数组添加为参数。这样该方法就知道它应该获得最大数量的Array对象。例如:

    public int getMax(int [] randomArray){       //找到最高的数字       return randomArray [MAX]; }

  4. 这适用于所有方法。

    我希望这可以解决你的一些答案,如果不是,请添加评论或其他内容。

    所以这是你的代码:

    驱动程序类:

    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.
}

在该代码中,someVariablemethod的本地代码,并且在其外部不可用。您无法在method2中访问它。

我建议您不仅要阅读上述范围规则链接,还要阅读member variables上的官方教程,其中也介绍了范围。那里的信息将帮助您制定最终战略。

在您的具体情况下,您最合理的两个选择是:

  1. 您可以将randomArray作为班级的成员字段(请参阅上面的链接)。
  2. 您可以将randomArray作为参数传递给各种方法(例如,作为getAverage的参数,另请参阅passing information to a method上的官方教程。)
  3. 您还有其他一些问题,其中一些问题在此处提到,但我认为这是您的主要困惑。阅读官方教程(上面的docs.oracle.com链接),它们简洁而且写得很好,并且会填写一些缺失概念的空白。在你这样做之后,再试一次。

    顺便说一句,关于编译器错误:

    System.out.println(randomArray[].getAverage());
    

    不幸的是randomArray[].getAverage()根本没有足够的理由来证明编译器如何解释它的完整解释,所以说:不,这是错的。 :)

    您需要查看上面提到的“将信息传递给方法”教程,因为看起来您正试图表达这样的内容(上面的选项2):

    int getAverage (int randomArray[]) {
        ...
    }
    
    System.out.println(getAverage(randomArray));
    

    暂且不说:请注意,一堆整数的平均值本身不一定是整数(1和2的平均值是1.5)。您可以考虑计算并返回floatdouble