加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

通过Java集合迭代使这些球反弹,任何提示?

发布时间:2020-12-15 02:59:15 所属栏目:Java 来源:网络整理
导读:如果问题不明确但我想不出另一种方式来表达它,我道歉. 这是我周末在BlueJ工作的课堂作业.我必须改变一个方法(弹跳)让用户选择应弹跳的球数. 其他要求是:球应该具有不同的尺寸,并且应该在它们弹跳之前沿着屏幕顶部连续显示. 为了做到这一点,我必须使用一个集
如果问题不明确但我想不出另一种方式来表达它,我道歉.

这是我周末在BlueJ工作的课堂作业.我必须改变一个方法(弹跳)让用户选择应弹跳的球数.

其他要求是:球应该具有不同的尺寸,并且应该在它们弹跳之前沿着屏幕顶部连续显示.

为了做到这一点,我必须使用一个集合(ArrayList,HashMap,HashSet).到目前为止,我已经使用了HashMap,并且能够让用户选择一些随机大小的“球”,这些“球”将自己置于屏幕上半部分的随机位置.

当我试图让每个球从屏幕顶部的位置反弹,在右手边结束时,我就会卡住.我可以让代码绘制一个球,弹回它然后绘制另一个球,弹回它等,直到用户选择的球数循环.

还有另外两个类,一个用于绘制画布,另一个用于绘制球并移动它们.我不允许触摸这两个.

我正在做错的方式可能就在我面前,但我一直在盯着这段代码我想我会问.

我当前的代码版本如下所示:

import java.awt.Color;
import java.util.HashMap;
import java.util.Random;
import java.util.Iterator;

public class BallDemo   
{
    private Canvas myCanvas;

    private HashMap<Integer,BouncingBall> ballMap;

    private int n;

    private int j;

    private BouncingBall ball;

    /**
     * Create a BallDemo object. Creates a fresh canvas and makes it visible.
     */
    public BallDemo()
    {
        myCanvas = new Canvas("Ball Demo",600,500);
    }

我必须编辑的方法来反弹球:

public void bounce(int numBalls)
    {
        ballMap = new HashMap<Integer,BouncingBall>();
        int ground = 400;   // position of the ground line
        Random randomD1 = new Random();
        Random xpos = new Random();


        myCanvas.setVisible(true);

        // draw the ground
        myCanvas.drawLine(50,ground,550,ground);

        // add balls to HashMap
           for(n = 0; n < numBalls; n++) {
         ballMap.put(numBalls,(ball = new BouncingBall(xpos.nextInt(300),50,randomD1.nextInt(200),Color.BLUE,myCanvas)));
         //
            for(j= 0; j < ballMap.size(); j++) {
                ball.draw();
                boolean finished =  false;
                   while(!finished) {
                     myCanvas.wait(50);           // small delay
                     ball.move(); // bounce the ball

                        // stop once ball has travelled a certain distance on x axis
                          if(ball.getXPosition() >= 550) {
                                    finished = true;
                                }



                        }
            }






        }
       }
}

我是否使用HashMap在正确的界限上?键,值的组合似乎是最好的方法.我想我需要以某种方式迭代放置在集合中的项目,以使它们使用move()方法反弹.但首先,无论用户定义了多少,我都需要将球保持在屏幕顶部.

我是编程的新手,我只是难倒.

谢谢你的帮助!

解决方法

@16dots部分正确,除了ballMap.put(numBalls,ball);每次都会在哈希映射中重写相同的值,因为numBalls不会改变…

关键应该是唯一的.

它应该读……

for (int n; n < numBalls; n++) {
    BouncingBall ball = new BouncingBall(xpos.nextInt(300),randomD1.
            nextInt(200),myCanvas);
    ballMap.put(n,ball);
}

boolean finished = false;
while (!finished) {
    finished = true;
    for (int j = 0; j < ballMap.size(); j++) {
        BouncingBall selectedBall = ballMap.get(j);
        selectedBall.draw();
        // Only move the ball if it hasn't finished...
        if (selectedBall.getXPosition() < 550) {
            selectedBall.move(); // bounce the ball

            // stop once ball has travelled a certain distance on x axis
            if (selectedBall.getXPosition() < 550) {
                finished = false;
            }
        }
    }
    myCanvas.wait(50);           // small delay
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读