【问题标题】:Add java object twice两次添加java对象
【发布时间】:2013-02-11 05:21:06
【问题描述】:

所以我对 Java 比较陌生,而且我一直在使用 Eclipse。主要部分是最后三行,我想让对象myBrick 出现多次。如果我运行它,它只会出现在第二个位置(最后一行)。有可能吗?

import acm.graphics.*;
import acm.program.*;
import java.awt.*;

public class Pyramid extends GraphicsProgram {

    /** Width of each brick in pixels */
    private static final int BRICK_WIDTH = 30;

    /** Height of each brick in pixels */
    private static final int BRICK_HEIGHT = 12;

    /** Number of bricks in the base of the pyramid */
    private static final int BRICKS_IN_BASE = 14;

    public void run() {
        double windowWidth = 756;
        double windowHeight = 494;
        int numberOfBricks = (BRICKS_IN_BASE*(BRICKS_IN_BASE+1))/2;

        double emptySpace = windowWidth - (BRICK_WIDTH*BRICKS_IN_BASE);
        int cushion = (int)emptySpace/2;

        GRect myBrick = new GRect(BRICK_WIDTH, BRICK_HEIGHT);
        add(myBrick, cushion, (windowHeight-BRICK_HEIGHT));
        add(myBrick, (cushion+BRICK_WIDTH), (windowHeight-BRICK_HEIGHT));
    }
}

【问题讨论】:

  • 这里的 add() 函数是什么?
  • 我相信它会将对象添加到窗口中
  • 在哪里出现多次?
  • 如果您是 java 新手,请在记事本中编写程序并使用命令行运行它们...只是一个建议
  • 我希望它在出现的图形窗口中出现多次。

标签: java eclipse object add


【解决方案1】:

我认为问题可能在于当您使用第二个 add() 方法时,它使用的是相同的 myBrick 对象,而不是创建第二个对象。尝试为您的第二个 add() 函数创建一个新的 GRect 对象。

【讨论】:

  • 就是这样,我想多次添加同一个对象。
  • 不看 add() 就很难找出问题所在。 add() 方法在调用时可能会用新值覆盖以前的值。
  • 我觉得是这样...有没有比add()更好的方法?
【解决方案2】:

第二个add() 使用与第一个相同的对象引用。 Java 是一种按值传递 语言,但它将引用的值传递给对象。这意味着无论第一个add()myBrick 造成什么突变,都会被第二个add() 调用看到,我确信这违反了程序的语义。 (我建议你阅读this SOF post

GRect 对象的构造似乎并不太复杂,那么为什么不复制这条指令并将其用于每个add() 调用的第一个参数呢?这样,您可以确保您有两个以相同状态开始的 GRect 对象,但修改一个不会影响另一个。

【讨论】:

  • 我有无限数量的GRects,它们需要在不同的地方
  • 编写一个循环,为每次调用 add() 创建一个新的 GRect 对象。
【解决方案3】:

正如其他人所指出的,不看 add 方法,很难给你答案。但如果我没记错的话,可能你正在寻找这样的东西,

  1. 创建该对象的列表。 List rectList = new ArrayList();
  2. 新建GRect Object,然后调用add函数。
  3. 将新的 GRect 对象添加到 rectList。

这样在列表中您将拥有三个 GRect 对象。您可以迭代并获取 GRect 对象的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-24
    • 1970-01-01
    • 2013-09-10
    • 2020-05-19
    • 1970-01-01
    相关资源
    最近更新 更多