【问题标题】:for loop only accesses last object of array even though counter variable is incremented即使计数器变量递增,for循环也只访问数组的最后一个对象
【发布时间】: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 类成员是静态的吗?他们不应该。 toStringcalculateAreacalculateVolume 也不应该是静态的。
  • @Eran 大获成功
  • 是的,它们是静态的……你怎么知道的?!改变它们会解决问题吗?我必须在 5 分钟前将它上交,我刚刚将打印最后一个对象的版本上交了 5 次哈哈。
  • @Jason_Silva 他知道,因为我们看到太多新手过度使用static,它符合您的问题的症状。从 Eran 的评论中,您应该推断出:您的 Box 类不应使用 static 关键字 anywhere。不在场上。不在方法上。
  • @Jason_Silva static 字段(或成员),方法意味着它们不属于任何对象,这意味着这些字段/方法属于类,并且该类的每个实例共享这些字段/方法。当你构建第五个盒子时,所有盒子都有它们的静态字段到它的值,所以所有盒子都有相同的值。换句话说,这些盒子没有单独的“形状”。

标签: java arrays object for-loop system.out


【解决方案1】:

你的方法不应该是静态的。 将 Box 类更改为 toString。 for (int x = 0; x

【讨论】:

  • 这与实际问题无关,即fieldsstatic
猜你喜欢
  • 1970-01-01
  • 2011-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-27
  • 2019-07-07
  • 1970-01-01
  • 2021-08-31
相关资源
最近更新 更多