I think I did the necessary changes but it got worse. The cue ball is moving in different directions, sometimes it stops and starts moving in a random direction.

public boolean travel(double dt) {

if (!ballMoved)
return false;
//for a 2D space the velocity operations is treated as a vector
double velocity = Math.sqrt(vx * vx + vy * vy);

//BACKUP the previous velocity value
double vxs = vx;
double vys = vy;

if (velocity != 0. && !inHole)
{
dxx = vx / velocity;
dyy = vy / velocity;
velocity -= a * dt;

if (velocity < 0.)
{
vx = 0.;
vy = 0.;
}
else
{
/* Average Velocity = Displacement / Change in time
OR  (x2 - x1)/ (t2 - t1)
*/
//CALCULATE THE NEW VELOCITY
//before it was vx = velocity * dxx;// vy = velocity * dyy;
vx -= a * dt;
vy -= a * dt;
}
}
//CALCULATE THE DISPLACEMENT
//before it was x += vx * dt;  y += vy * dt;
x += (vxs+vx) * dt/2; //add value to the x coordinate
y += (vys+vy) * dt/2; // add value to the y coordinate

if(isWithinLimits(x, y))
{ /*no action taken*/ }
else if(inHole)
{
vx = 0.;
vy = 0.;
}
//if the x and y coordinate value are larger than the limits
//which are the table boundary
else
changeDirection();