-1

I have a project due in my (OOP) class. This was the assignment: Change the bounce method to place the balls randomly ­anywhere in the top half of the screen.

This is what I have,

import java.awt.Color;
import java.util.ArrayList;                  
import java.util.Random;
/**
 * Class BallDemo - a short demonstration showing animation with the 
 * Canvas class. 
 *
 * @author Michael Kölling and David J. Barnes
 * @version 2016.02.29
 */

public class BallDemo   
{
    private Canvas myCanvas;
    private ArrayList ball;
    private BouncingBall bounceBall;
    private Random randomGenerator;

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

    /**
      * Simulate two bouncing balls
      */
    public void bounce()
    {
        int ground = 400;   // position of the ground line
        ball = new ArrayList();
        randomGenerator = new Random();

        myCanvas.setVisible(true);
        myCanvas.erase();

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

        // create and show the balls
        BouncingBall ball1 = new BouncingBall(position(),position(),16,Color.BLUE,ground,myCanvas);
        ball1.draw();
        BouncingBall ball2 = new BouncingBall(position(),position(),20,Color.RED,ground,myCanvas);
        ball2.draw();
        BouncingBall ball3 = new BouncingBall(position(),position(),20,Color.BLACK,ground,myCanvas);
        ball3.draw();
        //Add balls to ArrayList
        ball.add(ball1);
        ball.add(ball2);
        ball.add(ball3);

        This is where I get the error:

        // make them bounce
        boolean finished =  false;
        while (!finished) {
            myCanvas.wait(50);           // small delay
            for(int i = 0; i < ball.size(); i++) {
                **bounceBall = ball.get(i);**        
                bounceBall.move();

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

    /**
     * Randomly generates the position
     * Pick the number between 0 to 200
     */

    public int position() {
        return randomGenerator.nextInt(200);
    }
}

This was helped by an expert programmer but I still get the compiler error, it's around the bounceBall = ball.get(i); mainly around the (i).

Sid
  • 4,893
  • 14
  • 55
  • 110
Polska711
  • 1
  • 1

2 Answers2

1

This happens because you have a list of objects with type Object, not a list of BouncingBall objects, so compiler cannot just convert an Object to a BouncingBall. If you use java version >= 1.5, use typed list: ArrayList<BouncingBall> ball, or cast object to BouncingBall: bounceBall = (BouncingBall)ball.get(i);

Sergi
  • 990
  • 5
  • 16
0

Change

ArrayList ball;

to

ArrayList<BouncingBall> ball;

will solve your problem.

ArrayList by default is ArrayList < Object >. Hence you will get error in line bounceBall = ball.get(i); since you are trying to assign Object to BouncingBall

Shashank
  • 416
  • 5
  • 16