질문이 명확하지 않은 경우 죄송하지만 다른 방법으로 생각할 수는 없습니다.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을 사용하여 올바른 라인 I 오전 ? 키, 값의 조합이 가장 좋은 방법이었습니다. move() 메서드를 사용하여 바운스되도록 컬렉션에있는 항목을 반복해야한다고 생각합니다. 하지만 먼저 사용자가 정의한 것과 관계없이 화면 상단에 연속으로 머물러 있어야합니다.
저는 프로그래밍에 익숙하지 않고 난처하게 될 것입니다.
도움 주셔서 감사합니다. 16dots @
사실은 그의 질문에 만들어진 삭제 된 코멘트에서 변경,하지만, 좋은 캐치를 응답 할 때 어떻게 든 통과 떨어졌다. – 16dots
답장을 보내 주셔서 감사합니다. 귀하의 반응은 제가 루프를 청소하는 데 도움이되었습니다, 저것 감사합니다! 그러나 코드는 이전과 마찬가지로 한 번에 하나의 공을 그립니다. 내가 무엇을 해야하는지에 대한 나의 이해는 사용자 정의 된 수의 볼을 그려서 한 행에 표시 한 다음 마지막 하나가 .getXposition finished = true에 도달 할 때까지 하나씩 바운스되도록하는 것입니다. 내가 할 수있는 능력은 내가 고민하고있다. 그것이 불분명하거나 내가 놓친다면 미안해! – daveyboy
@ 16dots, 만약 당신이 새로운 수정 된 답변을 올리면 나는 그것을 훔친 당신의 생각 이었기 때문에 업보 트에 기뻐할 것입니다. – MadProgrammer