英文:
why is my accumulator not incrementing and always returuns zero?
问题
我刚开始学习Java,所以我的问题可能对大多数人来说很有趣。
我试图编写一个计算课程数组平均值的程序,但出于某种原因我的累加器没有增加。
public void setStudents() {
accumulator = 0;
for (int x = 0; x < course.length; x++) {
accumulator = accumulator + course[x].result;
}
}
public double getAverage() {
average = (double) (accumulator / course.length);
return average;
}
public int getTotal() {
return accumulator;
}
英文:
I have just started to learn java so my question might be funny to most of you,
i am trying to write a program that calculate an average for an array of courses
and for some reason my accumulator is not incrementing
public void setStudents() {
accumulator=0;
for(int x=0;x<course.length;x++)
{
accumulator =accumulator+ course[x].result;
}
}
public double getAverage () {
average=(double)(accumulator/course.length);
return average;
}
public int getTotal() {
return accumulator;
}
答案1
得分: 1
我假设这段代码被包裹在一个带有名为accumulator
的成员字段变量的类中。在这种情况下,当类被构造时,应该调用setStudents
方法,以便正确设置累加器。如果你在构造函数中没有调用setStudents
方法,或者在调用getAverage
方法之前没有任何地方调用过,那么accumulator
字段将被设置为其默认值,即0。这可能是你得到0作为结果的原因。这可以通过在该类的构造函数中调用setStudents
,或者在调用getAverage
方法之前的任何地方调用来修复。另外,在getAverage
方法中,在进行算术运算之前,你应该先将其转换为double类型,否则仍然会调用整数除法,然后再转换为double类型。因此,这行代码
average=(double)(accumulator/course.length);
应改为
average=(double)(accumulator)/course.length;
英文:
I'm assuming this is wrapped in a class with a member field variable called accumulator
. In this case, when the class is constructed, the setStudents
method should be called, so that the accumulator is properly set. If you don't call the setStudents
method in the constructor, or anywhere before you call the getAverage
method, the accumulator
field will just be set to its default value, which is 0. This is probably the reason why you are getting 0 as the result. This can be fixed by calling setStudents
in the constructor of this class, or anywhere before you call the getAverage
method. Also, in the getAverage
method, you should be casting to double before doing the arithmetic, or else the integer division still gets called and then gets cast to a double afterward. So the line
average=(double)(accumulator/course.length);
should be
average=(double)(accumulator)/course.length;
答案2
得分: 0
class Mine {
int accumulator;
double average;
Course[] course = {Course.builder().result(10).build(), Course.builder().result(20).build(), Course.builder().result(30).build()};
public static void main(String[] args) {
Mine obj=new Mine();
obj.setStudents();
double avg = obj.getAverage();
System.out.println(avg);
}
public void setStudents() {
Course[] course = {Course.builder().result(10).build(), Course.builder().result(20).build(), Course.builder().result(30).build()};
for (int x = 0; x < course.length; x++) {
accumulator = accumulator + course[x].result;
}
}
public double getAverage() {
average = (double) (accumulator / course.length);
return average;
}
public int getTotal() {
return accumulator;
}
}
@Builder
@Data
class Course {
int result;
}
英文:
class Mine {
int accumulator;
double average;
Course[] course = {Course.builder().result(10).build(), Course.builder().result(20).build(), Course.builder().result(30).build()};
public static void main(String[] args) {
Mine obj=new Mine();
obj.setStudents();
double avg = obj.getAverage();
System.out.println(avg);
}
public void setStudents() {
Course[] course = {Course.builder().result(10).build(), Course.builder().result(20).build(), Course.builder().result(30).build()};
for (int x = 0; x < course.length; x++) {
accumulator = accumulator + course[x].result;
}
}
public double getAverage() {
average = (double) (accumulator / course.length);
return average;
}
public int getTotal() {
return accumulator;
}
}
@Builder
@Data
class Course {
int result;
}
If you see above code, i had just modified your existing code.
You made some minor mistake with getting and assigning local variables.
Just go through with this link
, which will guide you about scope,global variable, local variables
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论