Java问题:尝试创建和绘制随机数量的对象

时间:2010-10-12 05:08:19

标签: java

我是一名Java新手参加一个初级编程班,我正在努力完成我的家庭作业(明天到期!)而且我一直在撞墙试图弄清楚我做错了什么。

这是基本的作业:

  1. 创建一个获取x和y位置参数的Building类 - 我没有遇到任何问题

  2. 使用Panel类绘制随机数量的建筑物 - 这就是我遇到麻烦的地方。

  3. 我在Actionscript和Javascript中多次做过这种事情,但由于某些原因我无法在Java中使用它。

    我的策略是: 创建一个随机数r(完成) 设置'for'循环从0到r运行 为新建筑物调用构造函数 将该构建添加到数组(或ArrayList) 画大厦 结束循环

    我尝试过多种变体(使用数组代替ArrayList),但这是我当前的代码:

    这是我的代码:

    public class CityPanel extends JPanel
    {
     private Bldg bldg
     ArrayList<Bldg> bs = new ArrayList<Bldg>();
    
    
     //------------------------------------------------------------------------
     //Constructor; Creates five building objects
     //------------------------------------------------------------------------
    
     public CityPanel()
     {
    
    
    
      setPreferredSize (new Dimension(430, 400));
      setBackground (new Color(0x46, 0x82, 0xb4));
     }
    
     //------------------------------------------------------------------------
     //Draws this panel by requesting each object draw itself.
     //------------------------------------------------------------------------
    
     public void paintComponent (Graphics page)
     {
      int b = (int) Math.floor(Math.random() * 10);
    
      for( int i = 0; i < b; i++ ) {
       intArr[i] = new Integer( i );
       bldg = new Bldg(100*i, 300);
       bs.add(bldg);
       super.paintComponent(page);
       bldg.draw(page);
       System.out.print(bs.get(i).toString());
      }
    }
    

    当我运行主程序(绘制面板等的City类)时,我得到一个空框架。

    如果我只是在没有'for'循环的情况下放入构造函数,我会得到要绘制的Building,所以问题出在我的'for'循环和我正在尝试制作的方式和/或存储对象。

    当我谷歌“java创建多个对象”或“随机”或者你有什么我得到了很多或结果但没有任何相关性!

    对不起这篇长篇文章感到抱歉 - 我不知道如何提出这个问题!

    提前谢谢。 B'/ P>

1 个答案:

答案 0 :(得分:1)

在构造函数中构建您的建筑物

int b = (int) Math.floor(Math.random() * 10);

for( int i = 0; i < b; i++ ) {
   bldg = new Bldg(100*i, 300);
   bs.add(bldg);
}

然后将paintComponent更改为

public void paintComponent (Graphics page)
{
   super.paintComponent(page);

   for (Building bldg : bs) {
     bldg.draw(page);
   }
}

试一试。你应该只调用super.paintComponent一次