2016-09-21 22 views
-2

私は基本的に1つのメソッド(getMarks)でユーザーからマークを取得するクラス(MarkCollection)を持っており、別のメソッド(getAverage)のマークの平均を取得し、最後に3番目のメソッド(getGrades)の平均マーク。複数の方法で複数変数を使用するにはどうすればよいですか?

getGradesメソッドが得られるまで、すべてが完全に機能します。私が知る必要があるのは、どのようにしてgetGradesメソッドに '平均'変数(マークの平均値を格納する)を取得するのかです。 getGradesメソッドは、平均値に基づいて得られるグレードを取得するために、 'average'変数をとり、IFステートメントに挿入する必要があります。

つまり、getAverageメソッドのように変数 '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); 
    } 
    } 
    } 
+0

はgetGrade方法と同じクラスに位置getAverage方法ありますか? –

+0

は 'getAverage()'がdoubleを返してそのシグネチャが 'public double getAverage()'になるように 'getGrade()'を変更し、平均値を引数として 'getGrade(double average) 'になるように変更します。 –

+0

今すぐケビンを試してください、はい、それは同じクラスにあります。 –

答えて

0

の内部からそのメソッドを呼び出すことです平均を二重として返す。次に、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

+0

ありがとうございますが、私の唯一の問題は、メインメソッド(すべてのメソッドを呼び出します)では、getGradesメソッドを除いて、すべてのメソッドが完全に呼び出されて動作することです。プログラムはそれを認識せず、 "getGradesメソッドを作成する"ように指示します。私は使用した:getGrade(getAverage()); –

+0

あなたの主な方法はどこですか?新しいオブジェクトを作成する必要がありますか?その場合、getGrade()に引数を渡すことは適切ではないかもしれません。以下を試すことができます: MarkCollection markCollection = new MarkCollection(); markCollection.getGrade(markCollection.getAverage()); – PrestonM

+0

私の主な方法は別のクラスです。私は今このようになります:class3.getGrade(class3.getAverage()); ......しかし、それはまだ 'getAverage'を拾いません –

0

まず、タイプdoubleを返すために、あなたのgetAverage方法を変更し、その中の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... 

また、あなたのmainメソッドから、あなたの代わりにパラメータとして平均値を渡すことができます。

public void getGrade(double average){ 

    double grade; 
    if... 
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); 
     } 
    } 
} 
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.. 
     } 
0

を平均を定義しますが発生している問題がありますその平均値はgetAverage()の範囲内にあるだけです。方法getAverage()のみが2倍の平均にアクセスできます。この問題を解決する1つの方法は、getAverage()持っdoubleを返し、あなたのgetGrade()メソッドは、パラメータとして、二重を受け入れる必要があり、あなたのgetAverage()メソッドのニーズgetGrade()

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

public void getGrade(){ 
    double average = getAverage(); 
    double grade; 
    // If statements here 
} 
関連する問題