Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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 - Fatal编程技术网

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

Java问题:尝试创建和绘制随机数目的对象,java,Java,我是一名Java新手,正在上初级编程课,我正在努力完成我的家庭作业(明天就要交了!),我一直在拼命想弄清楚我做错了什么 以下是基本任务: 创建一个Building类,该类接受x和y位置的参数-这一点我做得没有问题 使用Panel类绘制随机数目的建筑物-这就是我遇到的问题所在 我已经在Actionscript和Javascript中做过很多次类似的事情,但由于某些原因,我无法让它在Java中工作 我的策略是: 创建一个随机数r(完成) 将“for”循环设置为从0运行到r 调用新建筑的构造函数 将该

我是一名Java新手,正在上初级编程课,我正在努力完成我的家庭作业(明天就要交了!),我一直在拼命想弄清楚我做错了什么

以下是基本任务:

  • 创建一个Building类,该类接受x和y位置的参数-这一点我做得没有问题

  • 使用Panel类绘制随机数目的建筑物-这就是我遇到的问题所在

  • 我已经在Actionscript和Javascript中做过很多次类似的事情,但由于某些原因,我无法让它在Java中工作

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

    我已经尝试过这种方法的多种变体(使用数组而不是ex的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());
      }
    }
    
    公共类CityPanel扩展了JPanel
    {
    私人楼宇
    ArrayList bs=新的ArrayList();
    //------------------------------------------------------------------------
    //构造函数;创建五个建筑对象
    //------------------------------------------------------------------------
    公共城市面板()
    {
    setPreferredSize(新尺寸(430400));
    立根背景(新颜色(0x46、0x82、0xb4));
    }
    //------------------------------------------------------------------------
    //通过请求每个对象绘制自身来绘制此面板。
    //------------------------------------------------------------------------
    公共组件(图形页)
    {
    intb=(int)Math.floor(Math.random()*10);
    对于(int i=0;i
    当我运行主程序(一个绘制面板等的城市类)时,我得到一个空框架

    如果我只是在没有“for”循环的情况下输入一个构造函数,我就得到了要绘制的建筑,所以问题就出在我的“for”循环中的某个地方,以及我试图创建和/或存储对象的方式

    当我在谷歌上搜索“java创建多个对象”或“随机”或诸如此类的东西时,我得到了很多结果,但没有任何相关信息

    抱歉发了这么长的帖子-我不知道该怎么问这个问题

    提前谢谢。
    b

    在建筑中建造你的建筑

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

    试试看。你应该只调用super.paintComponent一次,在构造函数中创建你的建筑

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

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

    你真的需要正确格式化源代码,否则没有人会费心去读它。我会创建一次建筑,然后只在
    paintComponent
    中绘制它们。这个方法可能会被调用很多次,并且在调整win的大小时,你会得到不同的建筑陶氏或(在旧系统上)在上面移动另一个窗口。另外,你正在创建的建筑比你想要的多得多,因为你从来没有清除过
    ArrayList
    。为什么要将页面绘制b次?你真的需要正确设置源代码的格式,否则没人会读它。我会创建一次建筑,并且只在
    paintComponent
    中绘制它们。这就是方法可能会被调用多次,当您调整窗口大小或(在较旧的系统上)在其上移动另一个窗口时,您将得到不同的建筑物。此外,您创建的建筑物比您想要的多得多,因为您从未清除
    ArrayList
    。为什么要绘制页面b次?+1,因为paint()被系统多次调用,并且因为super.paintComponent()将用背景色填充所有内容并擦除您的建筑物。是的-没错,就是这样!感谢你们的帮助!这件事很简单,让我松了一口气。我用这件事在桌子上敲了几个小时的头。@Jesper-你真的应该让你的批评有建设性,否则没人会读它。+1,因为paint()被系统多次调用,并且因为super.paintComponent()将用背景色填充所有内容并删除您的建筑物。是的,没错,就是这样!感谢你们的帮助!这件事很简单,让我松了一口气。我用这件事在桌子上敲了好几个小时。@Jesper-你真的应该让你的批评具有建设性,否则没人会读它。