通过Java集合迭代来使这些球弹跳,任何提示?
道歉,如果问题不明确,但我想不出用其他方式来描述它。
这是我整个周末都在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, ground, 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);
将每次都在hash映射中写入相同的值,因为numBalls
不会更改...
关键应该是独一无二的。
它应该阅读...
for (int n; n < numBalls; n++) {
BouncingBall ball = new BouncingBall(xpos.nextInt(300), 50,
randomD1.
nextInt(200), Color.BLUE, ground, 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
}
链接地址: http://www.djcxy.com/p/11391.html
上一篇: Iterating through a Java collection to make these balls bounce, any hints?