Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
添加java对象两次_Java_Eclipse_Object_Add - Fatal编程技术网

添加java对象两次

添加java对象两次,java,eclipse,object,add,Java,Eclipse,Object,Add,所以我对Java比较陌生,我一直在使用Eclipse。主要部分是最后三行,我想让对象myBrick多次出现。如果我运行此命令,它只显示在第二个位置(最后一行)。可能吗 import acm.graphics.*; import acm.program.*; import java.awt.*; public class Pyramid extends GraphicsProgram { /** Width of each brick in pixels */ private

所以我对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()方法时,它使用的是同一个myBrick对象,而不是创建第二个myBrick对象。尝试为第二个add()函数创建一个新的GRect对象。

第二个
add()
使用与第一个相同的对象引用。Java是一种传递值语言,但它将引用的值传递给对象。这意味着第一个
add()
myBrick
所做的任何突变都将被第二个
add()
调用看到,我确信这违反了程序的语义。(我建议你阅读)


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

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

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

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

    add()是什么函数在这里?我相信它会将对象添加到窗口中多次出现在哪里?如果您是java新手。在记事本中编写程序并使用命令行运行它们…只是一个建议我希望它在出现的图形窗口中多次出现。这就是问题所在,我想多次添加同一个对象。如果不查看add(),很难找出问题所在。可能是add()方法在调用时用新值覆盖了以前的值。。。有比add()更好的方法吗?我有一个无限多的
    GRect
    s,它们需要在不同的位置编写一个循环,为每次调用
    add()
    创建一个新的GRect对象。