这是我的主要方法,我正在尝试重新编码,因为我在学校反复失败了。我想从我的main方法中获取一个来自循环的用户输入的数组,并将其传递给我的“TestScoresTwo.java”类中的构造函数。我想接着使用该数组并使用它来对值进行求和,并在类中的方法中找到平均值,然后返回总和。
import java.math.*;
import java.text.DecimalFormat;
import java.io.*;
public class labBookFortyTwo
{
public static void main(String[] args)
{
Scanner myInput = new Scanner(System.in);
System.out.println("Please enter the amount of grades there are ");
int size = myInput.nextInt();
double grade = 0;
double[] myArray = new double[size];
for(int count = 0; count < myArray.length; count++)
{
System.out.println("enter grade ");
grade = myInput.nextDouble();
myArray[count] = grade;
System.out.println("grade is " + myArray[count] );
}
TestScoresTwo myScore = new TestScoresTwo(myArray, size);
double avg = myScore.avgGrade();
System.out.println("avg is" + avg);
}
}
这是我的TestScoresTwo.java类。
public class TestScoresTwo
{
int size = 0;
double[] tScore = new double[size];
double sum = 0;
public TestScoresTwo(double[] scores ,int sizE)
{
double[] tScore = scores;
size = sizE;
}
public double avgGrade()
{
for(int count = 0; count < tScore.length ; count++)
{
sum = tScore[count] + sum;
}
double avg = sum / size;
return avg;
}
}
编译我的输出时是: “请输入有成绩的数量” 3 “进入等级” 11 “等级是11.0” 50 “等级是50.0” 70 “年级是70.0” “avg”是0.0“ “按任意键继续......”
所以出于某种原因,在我的类TestScoresTwo.java中,输入了for循环,我不知道为什么。它们是两个独立的文件,我不能想到要包含的任何其他信息。感谢您提供任何帮助。
答案 0 :(得分:0)
你的问题;在TestScoresTwo
类:
public TestScoresTwo(double[] scores ,int sizE)
{
double[] tScore = scores;
size = sizE;
}
tScore是构造函数的本地。因此,您将传递的变量分配给局部变量,一旦到达构造函数的末尾,该变量就会丢失。
所以当你打电话给avgGrade()
计算平均值时,计算平均值的数组是空的。
将其替换为:
public class TestScoresTwo
{
int size = 0;
double[] tScore; // no need to create it here, it's already created and filled in outside
double sum = 0;
public TestScoresTwo(double[] scores ,int sizE)
{
this.tScore = scores; // "this." added for clarity
this.size = sizE; // "this." added for clarity
}
答案 1 :(得分:0)
您声明数组double[] tScore = new double[size];
的大小为零。您打算在构造函数中使用新数组替换它:
double[] tScore = scores;
但是,您所做的只是声明一个同名的局部变量,并为其分配参数,该参数会立即超出构造函数末尾的范围。似乎没有输入for
循环,因为tScore
仍为空且长度为零。
删除double[]
,以便tScore
解析为您的实例变量并正确分配。
tScore = scores;
另外,看到名为sizE
的参数和名为size
的实例变量令人困惑。使用this
来引用实例变量是很常见的,因此可以将它们命名为相同的名称并且清楚。尝试命名参数size
,并在构造函数中使用此行:
this.size = size;