Chiedo scusa se la domanda non è chiara ma non riesco a pensare a un altro modo per esprimerla.Iterare attraverso una raccolta Java per far rimbalzare queste sfere, qualche suggerimento?
Questo è per un incarico di classe che ho lavorato a BlueJ per tutto il weekend. Devo cambiare un metodo (rimbalzo) per consentire a un utente di scegliere quante palle devono essere rimbalzate.
Altri requisiti sono: le sfere devono essere di dimensioni diverse e devono essere visualizzate in fila lungo la parte superiore dello schermo PRIMA che rimbalzino.
Per fare questo, devo utilizzare una raccolta (ArrayList, HashMap, HashSet). Finora ho usato HashMap e sono stato in grado di far scegliere all'utente un numero di "palle" di dimensioni casuali che si posizionano in posizioni casuali nella metà superiore dello schermo.
Quando provo a far rimbalzare ogni sfera dalla sua posizione nella parte superiore dello schermo, finendo sul lato destro, mi blocco. Posso far sì che il codice disegni una pallina, rimbalzare, quindi pescare un'altra pallina, rimbalzarla ecc. Fino a quando il numero selezionato di palline dell'utente non si è arrotolato.
Ci sono altre due classi, una per disegnare la tela e una per disegnare le sfere e spostarle. Entrambi i quali non sono autorizzato a toccare.
Quello che sto facendo nel modo sbagliato è probabilmente proprio di fronte a me, ma ho osservato questo codice per così tanto tempo che ho pensato di chiedere.
La mia versione corrente del codice simile a questo:
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);
}
E il metodo devo modificare per far rimbalzare le palle:
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;
}
}
}
}
}
}
sono io, anche nella giusta direzione con un HashMap ? La combinazione di chiavi, valori sembrava il modo migliore per andare. Penso di aver bisogno di scorrere in qualche modo gli oggetti posizionati nella collezione per farli rimbalzare usando il metodo move(). Ma prima ho bisogno che le palline rimangano in fila nella parte superiore dello schermo, indipendentemente da quante persone l'utente definisca.
Sono nuovo alla programmazione e sto appena uscendo perplesso.
Grazie per qualsiasi aiuto!
ho effettivamente cambiato nel commento cancellato fatta alla sua domanda, ma in qualche modo scivolato passare quando stavo rispondendo esso, buona pesca. – 16dots
Grazie per le vostre risposte! La tua risposta mi ha aiutato a ripulire i miei anelli, grazie per quello! Tuttavia, il codice disegna e rimbalza una singola palla alla volta come prima. La mia comprensione di ciò che dovrei fare è disegnare un numero indefinito di palline, visualizzarle in una riga e POI farle rimbalzare una alla volta fino a quando l'ultima raggiunge il .getXposition finished = true. È l'abilità di fare ciò con cui sto lottando, scusa se non è chiaro o se mi sono perso qualcosa! – daveyboy
@ 16dots, se pubblichi una nuova risposta corretta, sarei felice di revocarlo, come è stata la tua idea Ho rubato – MadProgrammer