【问题标题】:How to pass a array to a constructor and use it in a class?如何将数组传递给构造函数并在类中使用它?
【发布时间】:2014-07-22 16:35:08
【问题描述】:

这是我的主要方法,我正在尝试重新编码,因为我在学校屡次失败。我想从循环中的用户输入从我的主方法中获取一个数组,并将其传递给我的“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” “平均”为 0.0” “按任意键继续...”

因此,由于某种原因,在我的类 TestScoresTwo.java 中,输入了 for 循环 inst,但我不确定为什么。它们是两个独立的文件,我想不出要包含的任何其他信息。感谢您提供的任何帮助。

【问题讨论】:

  • 你需要学习如何调试。如果您没有交互式调试器,请插入 System.out.println 语句以显示您的进度和存在的值。

标签: java arrays class constructor


【解决方案1】:

你的问题;在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
    }

【讨论】:

    【解决方案2】:

    您声明数组double[] tScore = new double[size]; 的大小为零。您打算在这里用构造函数中的新数组替换它:

    double[] tScore = scores;
    

    但是,您所做的只是声明一个同名的局部变量,并将参数分配给它,这会在构造函数的末尾立即超出范围。 for 循环似乎没有被输入,因为 tScore 仍然是空的并且长度为零。

    删除 double[] 以便 tScore 解析为您的实例变量并正确分配。

    tScore = scores;
    

    此外,看到一个名为 sizE 的参数和一个名为 size 的实例变量会让人感到困惑。使用this 来引用实例变量是很常见的,这样它们就可以被命名为相同的名称并且清晰。尝试将参数命名为size,并在构造函数中使用这一行:

    this.size = size;
    

    【讨论】:

    • 非常感谢您的帮助,它奏效了,我使用 sizE 的原因是因为使用它。让我感到困惑,但我会在未来尝试考虑。
    猜你喜欢
    • 1970-01-01
    • 2012-03-14
    • 2014-07-05
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-01
    相关资源
    最近更新 更多