Java 如何将数组传递给构造函数并在类中使用它?
这是我的主要方法,我正试图重新开始编码,因为我在学校里多次失败。我想从主方法中获取一个数组,并从循环中获取用户输入,然后将其传递给“TestScoresTwo.java”类中的构造函数。然后,我想获取该数组并使用它对值求和,在类中的方法中找到平均值,然后返回和Java 如何将数组传递给构造函数并在类中使用它?,java,arrays,class,constructor,Java,Arrays,Class,Constructor,这是我的主要方法,我正试图重新开始编码,因为我在学校里多次失败。我想从主方法中获取一个数组,并从循环中获取用户输入,然后将其传递给“TestScoresTwo.java”类中的构造函数。然后,我想获取该数组并使用它对值求和,在类中的方法中找到平均值,然后返回和 import java.math.*; import java.text.DecimalFormat; import java.io.*; public class labBookFortyTwo { public static vo
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);
}
}
import java.math.*;
导入java.text.DecimalFormat;
导入java.io.*;
公共类labBookFortyTwo
{
公共静态void main(字符串[]args)
{
扫描仪myInput=新扫描仪(System.in);
System.out.println(“请输入等级数量”);
int size=myInput.nextInt();
双级=0;
double[]myArray=新的double[大小];
对于(int count=0;count
这是我的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;
}
}
公共类TestScoresTwo
{
int size=0;
double[]t核心=新的双[尺寸];
双和=0;
公共TestScoresTwo(双[]分,整数大小)
{
双[]t分数=分数;
大小=大小;
}
公共双平均等级()
{
对于(int count=0;count
编译时,我的输出为:
“请输入有多少个等级”
3.
“输入等级”
11
“等级为11.0”
50
“等级为50.0”
70
“等级为70.0”
“平均”为0.0
“按任意键继续…”
因此,出于某种原因,在我的类TestScoresTwo.java中,输入了for循环inst,我不知道为什么。它们是两个独立的文件,我想不出包含任何其他信息。感谢您提供的任何帮助。您的问题在于
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
}
您已将数组
double[]tScore=new double[size];
声明为零大小。您打算在构造函数中用新数组替换它:
double[] tScore = scores;
但是,您所做的只是声明一个同名的局部变量,并为其分配参数,该参数立即超出构造函数末尾的范围。由于tScore
仍然为空且长度为零,因此似乎无法输入for
循环
删除double[]
,以便tScore
解析为实例变量并正确分配
tScore = scores;
此外,看到名为sizE
的参数和名为sizE
的实例变量也会让人感到困惑。通常使用this
来引用实例变量,这样它们可以被命名为相同的名称,但又很清晰。也可以尝试命名参数sizE
,并在构造函数中使用这一行:
this.size = size;
你需要学习如何调试。如果你没有一个交互式调试器,插入Studio.Out.PrtLn语句来显示你的进度和存在的价值。非常感谢你的帮助,它是有效的,而且我之所以使用大小,是因为使用这个。对我来说是混淆的,但是我会在将来尝试和考虑它。