【问题标题】:Displaying Average Integer in Array using Driver Program使用驱动程序显示数组中的平均整数
【发布时间】:2017-03-12 01:03:39
【问题描述】:

我需要练习我的语法。我有一组数字,它们是查找平均值、报告最高数字和报告最低数字的方法。要报告最高/最低数字,我将对数组进行排序。 但首先我的问题是报告平均值。我认为如果我能理解那部分,那么最小/最大将没有问题。我也试过把它改成 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());









        }

    }

【问题讨论】:

    标签: java arrays


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

    2. 在 Java 代码中,您需要添加一个 ;声明后不要忘记它们;)。你的 IDE 应该警告你。

    3. 当您创建 getMax() 方法时,您应该添加数组作为参数。这样该方法就知道它应该为哪个 Array 对象获得最高数字。例如:

      public int getMax(int[] 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());
        }
    }
    

    回复cmets中的问题:

    您应该在 getAverage 方法中提供 randomArray 作为参数,以便该方法知道它应该在哪个数组上操作,例如:driver.getAverage(randomArray);

    您的 getAverage 方法也有一些缺陷: 1. 你的 sum 变量应该在循环之外,因为否则你每次在循环内迭代时都会将 sum 设置为 0。 2.int[] randomArray = null;你根本不应该做这行,这行将创建一个新的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;
        }
    

    【讨论】:

    • 我现在确实得到了平均值的结果,但它是 0。当我尝试更改 public int getAverage() { int average = 0;到 int 平均 = null;或int平均;除非它为零,否则它不会让我运行代码。所以我认为返回值只是返回它,而不是循环中的内容。你有什么建议?
    • @zerocrys 我已经更新了对您问题的回答。
    • 谢谢,我想我现在可能能够弄清楚 MAX/MIN 部分。感谢你的帮助!我只是一个初学者。
    【解决方案2】:

    目前你的主类根本没有引用Driver,所以你的代码不能被调用。

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

    在这一行上,randomArray 仍然只是一个整数数组 (int[] randomArray = ...)。

    您需要创建一个 Driver 实例,传入您想要使用的任何数组,然后对其执行.getAverage()

    【讨论】:

      【解决方案3】:

      randomArray 为空,您正在尝试从空数组中读取。 您需要将 randomArray 定义为类成员,而不是所有函数中的局部变量。 函数内部的局部变量不能在函数结束后立即使用,并且在其他函数中使用相同的名称也无济于事。 还: 在循环之前定义总和和平均值。循环后计算并返回平均值。

      【讨论】:

        【解决方案4】:

        除其他外,您的主要问题似乎是对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 上的官方教程)。

        您还有其他一些问题,其中一些在此处的其他答案中有所提及,但我认为这是您在这里的主要困惑。通读官方教程(上面的 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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-02-20
          • 1970-01-01
          • 1970-01-01
          • 2015-01-15
          • 2020-09-06
          • 1970-01-01
          相关资源
          最近更新 更多