【发布时间】:2016-12-06 07:45:26
【问题描述】:
我创建了 5 个 Box 对象,将它们放在一个名为 box 的数组中,并希望遍历它们以打印它们的信息。确实可以访问的一个数组对象已成功打印,因此我知道这些方法很好。
但我的 for 循环似乎只访问最后一个对象。以 3.14、99.1 和 26.7 作为参数的那个。它打印了 5 次,所以我知道条件 (x
import java.util.Scanner;
public class BoxTest {
public static void main(String[] args) {
Box[] boxes= new Box[5];
Scanner stdin = new Scanner(System.in);
System.out.print("Enter a height: ");
double height = stdin.nextDouble();
System.out.print("Enter a width: ");
double width = stdin.nextDouble();
System.out.print("Enter a length: ");
double length = stdin.nextDouble();
Box first = new Box(width, length, height);
boxes[0] = first;
Box second = new Box();
boxes[1] = second;
Box third = new Box(2,3.5,5.75);
boxes[2] = third;
Box fourth = new Box(6.66,4.20,9.11);
boxes[3] = fourth;
Box fifth = new Box(3.14,99.1,26.7);
boxes[4] = fifth;
for (int x = 0; x < boxes.length; x++ ) {
System.out.println(Box.toString(boxes[x]) + " Area: " +
Box.calculateArea(boxes[x]) + " Volume: " +
Box.calculateVolume(boxes[x]));
}
}
【问题讨论】:
-
您没有包含 Box 类。 Box 类成员是静态的吗?他们不应该。
toString、calculateArea和calculateVolume也不应该是静态的。 -
@Eran 大获成功
-
是的,它们是静态的……你怎么知道的?!改变它们会解决问题吗?我必须在 5 分钟前将它上交,我刚刚将打印最后一个对象的版本上交了 5 次哈哈。
-
@Jason_Silva 他知道,因为我们看到太多新手过度使用
static,它符合您的问题的症状。从 Eran 的评论中,您应该推断出:您的Box类不应使用static关键字 anywhere。不在场上。不在方法上。 -
@Jason_Silva
static字段(或成员),方法意味着它们不属于任何对象,这意味着这些字段/方法属于类,并且该类的每个实例共享这些字段/方法。当你构建第五个盒子时,所有盒子都有它们的静态字段到它的值,所以所有盒子都有相同的值。换句话说,这些盒子没有单独的“形状”。
标签: java arrays object for-loop system.out