当前位置: 首页 > 知识库问答 >
问题:

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

艾心远
2023-03-14

这是我的主要方法,我正在努力重新学习编码,因为我在学校里多次失败。我想从主方法中获取一个数组,并从循环中获取用户输入,然后将其传递给“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);


}

}

这是我的测试分数。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”按任意键继续。。。"

因为某种原因,在我的课堂上,TestScorestw。java,正在输入for循环指令,我不知道为什么。它们是两个独立的文件,我想不出还有什么其他信息可以包含在内。谢谢你能给我的帮助。

共有2个答案

燕琛
2023-03-14

您声明了您的数组的大小为零。您打算在构造函数中用一个新的数组来替换它:

double[] tScore = scores;

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

正确地分配代码并删除代码。

tScore = scores;

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

this.size = size;
娄飞鸾
2023-03-14

你的问题;在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
    }
 类似资料:
  • 我试图使一个用户类和使用类来处理登录,但从某种原因我的用户类构造函数是读取我的mysqli对象作为一个字符串 这是我的密码 Class.php mysql.php checklogin.php 它给了我这个错误 可捕获的致命错误:在第13行的C:\wamp\www\class.php中,类mysqli的对象无法转换为字符串 我要把头发拔出来了,有什么想法吗?

  • 问题内容: 我的工厂如下 这是Foo的定义: 好。我不确定如何使用Guice将此参数传递给Foo构造函数? 有任何想法吗? 问题答案: 所有“ Guice构造函数参数”答案在某种程度上似乎都不完整。这是一个完整的解决方案,包括用法: //在实现类上注释构造函数和辅助参数 //使用仅接受辅助参数的create()方法创建工厂接口。 // FooFactory接口没有显式的实现类(Guice Magi

  • 我创建了一个Author对象,用于构造函数的方法签名:public Book但是,我所做的赋值要求将Author(实例变量)更改为。当然,现在我以前的构造函数不行了。这是密码 如果我上传的方式不令人满意,我对任何不便表示歉意。我还没有学会使用堆栈溢出。 谢谢!

  • Java枚举允许您将参数传递给构造函数,但我似乎不能传递数组。例如,下面的代码编译时有错误: 但如果将相同的数据作为数组常量传入,则代码将无法编译: 我也尝试过创建新的int[]数组的变体,比如: 没有运气。我认为问题在于传递一个数组常量。我不确定这是一个需要修正的简单语法,还是在传递这种类型的数据时存在一个潜在的问题。提前道谢。

  • 问题内容: 在处理中,我定义了以下类: 现在,我想创建该类的实例,但是我很难将数组传递给构造函数: 但这总是给我一个错误“意外令牌:{”。因此,显然无法“即时”定义数组。 但是,这将起作用: 但是我发现在对象外部声明该数组是很愚蠢的,因为这会在创建多个对象时带来各种麻烦: 现在,该类的两个实例都引用了相同的数组,这当然不是我想要的。 所以我的问题是:如何在不事先声明数组的情况下将数组正确传递给类的

  • 我正在尝试通过:如果流文件; 在我的主()中,到一个名为“FIFO”的类的构造函数:FIFO(文件); 在FIFO(FIFO.h)的头文件中,我有: 在FIFO.cc,我有: 我一直喜欢(还有更多,我只是粘贴其中一个): 在文件包括从/usr/lib/gcc/x86_64-redhat linux/4.4.7/…/…/…/…/包含/c /4.4.7/bits/localefwd.h: 43,从/u