这是一个如此简单的问题,但出于某种原因,我无法绕过对象阵列或对象阵列。我所要做的就是接受5个用户输入,并创建一个名为Height的类,创建对象数组并将用户输入存储到obj数组中并打印平均值。我有点卡住了。
class Height{
int total=0;
int count=0;
public Height(int y) {
total=total+y;
count++;
}
public void print() {
System.out.print("The average is: "+total/count);
}
}
public class ObjectArray {
public static void main(String[] args){
Scanner s=new Scanner(System.in);
System.out.println("Enter 5 heights in inches: ");
int[] x=new int[5];
int total=0;
for(int i=0;i<x.length;i++) {
x[i]=s.nextInt();
}
Height[] h=new Height[x.length];
for(int y=0;y<x.length;y++) {
h[y]=new Height(x[y]);
}
h.print();
}
}
也许我过度复杂了。现在的问题是我无法调用h.print();.我尝试了不同的迭代,例如:取出print方法并在每次迭代后进行所有打印。
答案 0 :(得分:2)
你的做法是错误的。您的Height
课程似乎负责评估平均值。因此,您应该将所有值放在单个Height
实例中,而不是为每个用户值生成新实例。
但是,h
是Height
对象的数组,而print()
方法是在单个Height
实例上定义的。要调用此类方法,您必须访问h
中包含的其中一个对象,即h[0].print()
。
答案 1 :(得分:0)
我假设您的目标只是打印通过用户输入收到的所有高度的平均值。
你的主要方法中的代码有点令人困惑,所以如果我在这里给出的任何例子中都错了,请纠正我。您应该,而不是创建x[]
数组,只需将五个值的用户输入添加到 for循环中的Height.total
,并增加Height.count
变量每个循环通过一个。这应该是这样的:
for (int i = 1; i <= 5; i++) {
// System.out.println("Please enter the next height: ");
Height.total += s.nextDouble();
Height.count++;
}
然后,您可以运行Height.print();
。
我还建议添加System.out.print("");
命令让用户知道他们应该输入下一个值。这是我在上面给出的示例代码中留下的评论。
答案 2 :(得分:0)
您必须以符合要求的方式设计Height
:
Height
为此,您需要一个私有值和一个静态计数器:
class Height {
private int value = 0;
private static int count = 0; // static => nb of instances
public Height(int y) {
value = y;
count++;
}
public static int averageOf(Height... heights) {
return Arrays.stream(heights).mapToInt(h -> h.value).sum() / count;
}
}
要获得平均值,因为它不依赖于特定实例,您可以使用静态方法,将给定的Height
的所有值相加并除以实例的nb
并使用如下:
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
int nb = 5;
System.out.println("Enter " + nb + " heights in inches: ");
Height[] heights = new Height[nb];
for (int i = 0; i < heights.length; i++) {
heights[i] = new Height(Integer.parseInt(s.nextLine()));
}
System.out.println("Average is " + Height.averageOf(heights));
}
答案 3 :(得分:-1)
class Height{
int total=0;
int count=0;
public Height(int y) {
total=total+y;
count++;
}
public void print() {
System.out.print("The average is: "+total/count);
}
}
你看到了构造函数吗?
每次调用它都会创建一个新对象。只能在一个print()
对象上调用Height
。
重新思考如何创建Height
对象。你不需要阵列。
您可以执行以下操作,创建一个名为update
的方法,用于更新类Height
中的变量。 (注意:考虑重命名此类也可能是AverageHeight
。)
class Height{
int total=0;
int count=0;
public void update(int y) {
total=total+y;
count++;
}
public void print() {
System.out.print("The average is: "+total/count);
}
}
然后在main()
:
而不是:Height[] h=new Height[x.length];
for(int y=0;y<x.length;y++) {
h[y]=new Height(x[y]);
}
这样做:
Height h=new Height();
for(int y=0;y<x.length;y++) {
h.update( x[y] );
}
h.print();