'非法开始表达'但在主要之外

时间:2016-07-05 09:53:40

标签: java

请耐心等待我对此我很陌生。我正在阅读一些教程,我收到此错误

GradeAnalyzer.java:51: error: illegal start of expression
myAnalyzer.getAverage(ArrayList<Integer>);

我发现有这么多主题说把主要的方法拿出来,但除非我真的很傻,否则我很确定我已经在主力之外了。欢迎所有关于此事的建议(也可以随意批评我的其余代码)。 import java.util.ArrayList;

public class GradeAnalyzer {

    public GradeAnalyzer() {

    }

    public int getAverage(ArrayList<Integer> grades) {

        ;
        if (grades.size() < 1) {

            System.out.println("Unfortunately the Array you are using is empty");

            return 0;

        } else {

            int sum = 0;

            for (Integer grade: grades) {
                System.out.println(grade);

                sum = sum + grade;
            }

            int average = sum / grades.size();
            System.out.println("Average =" + average);

            return average;
        }
    }

    public static void main(String[] args) {

        ArrayList<Integer> myClassroom = new ArrayList<Integer>();
        myClassroom.add(98);
        myClassroom.add(92);
        myClassroom.add(88);
        myClassroom.add(75);
        myClassroom.add(61);
        myClassroom.add(89);
        myClassroom.add(95);

    }

    public int myAnalyzer(ArrayList<Integer> myClassroom) {

        GradeAnalyzer myAnalyzer = new GradeAnalyzer();

        myAnalyzer.getAverage(ArrayList<Integer>);
    }
}

2 个答案:

答案 0 :(得分:3)

这是罪魁祸首:

myAnalyzer.getAverage(ArrayList<Integer>);

您提供了类型,其中需要表达式。您可能想要传递myClassroom参数:

myAnalyzer.getAverage(myClassroom);

其他说明:

  • 你可能也希望摆脱;顶部的迷路getAverage。我不认为这是一个语法错误,但它没有意义。

  • 我在任何地方都没有看到致电myAnalyzer(方法)。

  • myAnalyzer是一个非常奇怪的方法名称。

  • 最好不要在具有相同名称(myAnalyzer)的方法中声明局部变量(myAnalyzer)(尽管它有效)。

  • 通常,尝试将变量类型保留到接口而不是具体类型,因此:

    List<Integer> myClassroom = new ArrayList<Integer>();
    

    ...而不是在变量声明中使用ArrayList<Integer>

  • 如果使用ArrayList(毕竟分配并维护一个数组),尽可能告诉它使用的初始容量,这样可以确保不进行不必要的数组重新分配当你添加东西时。

  • sum += grade;是写sum = sum + grade;的惯用方法(尽管后者有效)。

答案 1 :(得分:2)

myAnalyzer.getAverage(ArrayList<Integer>);

不是有效的方法调用。您应该传递类型为ArrayList<Integer>的实例。

例如,如果您从main调用它,则可以写:

myAnalyzer.getAverage(myClassroom);

或者,如果您不想将此方法放在main中,请将myClassroom ArrayList声明和初始化移至myAnalyzer方法。