Processing Array Circle Art

i see two parts of program what
draw the same ellipse,
i guess the second wins.
so the first one using the c[i] has no effect.
( test: disable the first ellipse and you get same picture )

second: your if structure
about the mouseover is like
not draw the ellipse ( is that wanted or did you expect a other color )

there is a e[i] array not named containing 0 || 1 || 2
detected by if structure only if ( 0 ) {orange} else {green}
there you could add a third color.

i try:

int no = 20;  // number of objects

int[] x = new int[no];   // x-position
int[] y = new int[no];   // y-position
int[] d = new int[no];   // diameter
int[] e = new int[no];   // color 

void setup() {
  size(500, 500);
  ellipseMode(CENTER);
  colorMode(HSB, 100, 100, 100);
  for (int i = 0; i < no; i++) {
    d[i] = int(random(15, 50));
    x[i] = int(random(d[i], width - d[i]));   // always show full circles
    y[i] = int(random(d[i], height - d[i]));  // always show full circles
    e[i] = int(random(0, 101));               // kll 0 .. 100 HSB colors
    println("x "+nf(x[i],3,1)+" y "+nf(y[i],3,1)+" d "+nf(d[i],3,1)+" HSB color "+nf(e[i],3));
  }
}

void draw() {
  background(20, 50, 80);
  for (int i=0; i<no; i++) {
    if (dist(x[i], y[i], mouseX, mouseY) <= d[i]/2) {
      noFill();              // but show circle
      stroke(50, 100, 100);
    } else {
      noStroke();
      fill (e[i], 100, 100);
    } 
    ellipse (x[i], y[i], d[i], d[i]);
  }
}