我有一个类(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);
}
}
}
答案 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