2016-09-21 6 views
-2

Ich habe eine Klasse (MarkCollection), die im Grunde erhält die Marken von einem Benutzer in einer Methode (getMarks), dann wird der Durchschnitt dieser Marken in einer anderen Methode (getAverage) und schließlich muss die Note der erhalten Durchschnittsnote in der 3. Methode (getGrades).Wie verwenden Sie mehrere Variablen in mehreren Methoden?

Alles funktioniert perfekt, bis ich zur getGrades-Methode komme. Was ich wissen muss ist, wie bekomme ich die "durchschnittliche" Variable (die den Durchschnitt der Marken speichert) in die Methode getGrades. Die getGrades-Methode muss die "durchschnittliche" Variable nehmen und sie durch eine IF-Anweisung setzen, um basierend auf dem Durchschnitt jede Note zu erhalten, die der Schüler erhalten wird.

Kurz gesagt, wie bekomme ich die Variable 'Durchschnitt' (mit dem gleichen Wert wie in der getAverage-Methode gespeichert) in die getGrades-Methode, um den Durchschnitt richtig zu berechnen?

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); 

    } 

Alles funktioniert, bis diese Methode gut. Das Programm erkennt die 'durchschnittliche' Variable nicht. Wie bekomme ich diese Methode, um die durchschnittliche Variable wie in der vorherigen Methode zu erkennen, mit dem gleichen Wert darin gespeichert?

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

ist die getGrade Verfahren und die getAverage Methode in derselben Klasse liegt –

+0

have 'getAverage()' gibt ein double zurück, so dass seine Signatur zu 'public double getAverage() 'wird, dann ändert' getGrade() ', um einen Durchschnitt als Argument zu nehmen, so wird seine Signatur' getGrade (double average) ' –

+0

versuche das jetzt kevin, ja ahmed es ist in der gleichen klasse –

Antwort

0

Ihre getGrade() -Methode muss eine doppelte als Parameter zu übernehmen, und Ihre getAverage() -Methode Bedürfnisse den Durchschnitt als Double zurückgeben. Dann müssen Sie in Ihrer entweder getMarks() - oder main-Methode Ihre getGrade() -Methode aufrufen. Es würde ungefähr so ​​aussehen.

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

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

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

Hier sind die offiziellen javadocs zur bestandenen Argumente: https://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html

+0

danke, aber das einzige Problem, das ich habe, ist, dass in der Hauptmethode (wo ich alle Methoden aufrufen), jede Methode wird perfekt aufgerufen und funktioniert, mit Ausnahme der getGrades-Methode. Das Programm erkennt es nicht und sagt mir, "getGrades Methode zu erstellen". Ive verwendet: getGrade (getAverage()); –

+0

Wo ist Ihre Hauptmethode? Müssen Sie ein neues Objekt erstellen? Wenn dies der Fall ist, ist es möglicherweise nicht angebracht, ein Argument an getGrade() zu übergeben. Sie könnten Folgendes versuchen: MarkCollection markCollection = new MarkCollection(); markCollection.getGrade (markCollection.getAverage()); – PrestonM

+0

Meine Hauptmethode ist in einer anderen Klasse. Meins sieht jetzt so aus: class3.getGrade (class3.getAverage()); ...... aber es holt immer noch nicht 'getAverage' –

0

Zuerst Ihre getAverage Methode ändern double, zurückzukehren Typ und dann return average innerhalb davon:

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

Dann rufen Sie die Methode in Ihrer anderen Methode (statt, wo immer du bist nannte es von bereits):

public void getGrade(){ 

    double grade; 
    double average = getAverage(); 
    if... 

Oder, wenn Sie wollen immer nochanrufenvon Ihrem Haupt Methode können Sie den Mittelwert als Parameter übergeben statt:

public void getGrade(double average){ 

    double grade; 
    if... 
0

Nur durchschnittlich als ein Feld statt einer lokalen Variablen deklarieren.

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

machen das getaverage() doppelt Durchschnitt wie die Rückkehr:

 public double getAverage(){ 

      double average=....; 

      return average; 
     } 

     public void getGrade(){ 

     double average=getAverage(); 
     } 

oder den Durchschnitt als eine globale Variable in der Klasse definiert

 public double average =0; 

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



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

Das Problem, das Sie stoßen ist dieser Durchschnitt liegt nur im Bereich von getAverage(). Nur die Methode getAverage() kann auf den doppelten Durchschnitt zugreifen. Eine Möglichkeit, dieses Problem zu lösen, ist zu haben getAverage() zurückgeben double, und rufen Sie diese Methode aus dem Inneren des getGrade()

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

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