你如何在多种方法中使用多个变量?

时间:2016-09-21 17:08:02

标签: java variables

  

我有一个类(MarkCollection)基本上从一个方法(getMarks)获取用户的标记,然后它获得另一个方法(getAverage)中这些标记的平均值,最后它需要得到平均值的等级在第3种方法中标记(getGrades)。

在我使用getGrades方法之前,一切都很完美。我需要知道的是如何将'average'变量(存储标记的平均值)放入getGrades方法中。 getGrades方法需要采用“平均”变量并通过IF语句来获得学生根据平均值获得的任何等级。

简而言之,我如何将变量'average'(与getAverage方法中存储的值相同)存入getGrades方法以正确计算平均值?

class MarkCollection extends Main {

Scanner input = new Scanner(System.in);
int length = 3;

int[] marks = new int[length];

public  void getMarks(){


for (int counter = 0; counter < length; counter++) {
System.out.println("enter mark number "  + (counter + 1));
marks[counter] = Integer.parseInt(input.next());
}     

input.close();
}     

public void getAverage(){

     int sum = 0;

            for(int i=0; i < marks.length ; i++)
                    sum = sum + marks[i];

            //calculate average value
            double average = sum / marks.length;

            System.out.println("Students Mark average is : " + average);

   }
  

在此方法之前一切正常。该程序无法识别“平均”变量。如何使用此方法识别平均变量,就像在前一个方法中一样,并在其中存储相同的值。

    public void getGrade(){


    double grade;

    if (average >= 90) {
        grade = 1.1;
    } else if (average >= 70 ) {
        grade = 2.1;
    } else if (average >= 50 ) {
        grade = 2.2;
    } else if (average >= 70 ) {
        grade = 2.1;
    } else if (average < 50 ) {
        grade = 3.0;

    System.out.println("The Students Grade is = " + grade);
    }  
   }
  }

5 个答案:

答案 0 :(得分:0)

首先,将您的lapply(mylist, function(x) split(x, c("FAIL", "PASS")[(x$score > 20)+1])) 方法更改为返回类型getAverage,然后将double更改为其中:

return average

然后,在您的其他方法中调用该方法(而不是从您已经调用它的地方):

public void getAverage(){
    ...
    //Dividing two ints results in a truncated int value! Cast one to double.
    double average = ((double)sum) / marks.length; 
    System.out.println("Students Mark average is : " + average);
    return average;
}

或者,如果您仍希望从主方法中调用public void getGrade(){ double grade; double average = getAverage(); if... ,则可以将平均值作为参数传递:

getAverage

答案 1 :(得分:0)

只需将平均值声明为字段而不是局部变量。

class MarkCollection {
    double average = 0;

    Scanner input = new Scanner(System.in);
    int length = 3;

    int[] marks = new int[length];

    public void getMarks() {

        for (int counter = 0; counter < length; counter++) {
            System.out.println("enter mark number " + (counter + 1));
            marks[counter] = Integer.parseInt(input.next());
        }

        input.close();
    }

    public void getAverage() {

        int sum = 0;

        for (int i = 0; i < marks.length; i++) {
            sum = sum + marks[i];
        }

        //calculate average value
        average = sum / marks.length;

        System.out.println("Students Mark average is : " + average);

    }

    public void getGrade() {

        double grade;

        if (average >= 90) {
            grade = 1.1;
        } else if (average >= 70) {
            grade = 2.1;
        } else if (average >= 50) {
            grade = 2.2;
        } else if (average >= 70) {
            grade = 2.1;
        } else if (average < 50) {
            grade = 3.0;

            System.out.println("The Students Grade is = " + grade);
        }
    }
}

答案 2 :(得分:0)

使getaverage()返回双倍平均值:

       public double getAverage(){

           double average=....;

           return average;
        }

        public void getGrade(){

        double average=getAverage();
        }

或将平均值定义为类

中的全局变量
        public double average =0;

        public void getAverage(){
        this.average=...;
        }



        public void getGrade(){
         this.average..
        }

答案 3 :(得分:0)

您遇到的问题是平均值仅在getAverage()的范围内。只有方法getAverage()才能访问双倍平均值。解决此问题的一种方法是让getAverage()返回double,并从getGrade()内部调用该方法

public double getAverage(){
    // Same code here
    return average;
}

public void getGrade(){
    double average = getAverage();
    double grade;
    // If statements here
}

答案 4 :(得分:0)

你的getGrade()方法需要接受一个double作为参数,你的getAverage()方法需要将平均值作为double返回。然后在你的getMarks()或main方法中,你需要调用你的getGrade()方法。它看起来像这样。

public void getMarks(){
    ...
    getGrade(getAverage());
} 

public double getAverage(){
    double average = 0;
    ...
    return average
}

public void getGrade(double average){
    ...
}

以下是传递参数的官方javadoc: https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html