如何将数组传递给构造函数并在类中使用它?

时间:2014-07-22 16:35:08

标签: java arrays class constructor

这是我的主要方法,我正在尝试重新编码,因为我在学校反复失败了。我想从我的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循环,我不知道为什么。它们是两个独立的文件,我不能想到要包含的任何其他信息。感谢您提供任何帮助。

2 个答案:

答案 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;