public void computeDailyHighSpan (Quote Q[]) { // compute the span of the stock price on each day by means of a // stack, and store the information in the Quote objects int prevHigh; // closest preceding day when the stock price was higher Stack D = new ArrayStack(); for (int i = 0 ; i < Q.length ; i++) { // process the current day i while ( !D.isEmpty() && Q[i].getPrice() >= ((Quote) D.top()).getPrice() ) // note that if the first condition !D.empty() evaluates to // false, then the second condition is not evaluated D.pop(); if (D.isEmpty()) prevHigh = -1; // day i is a new high for the stock price else prevHigh = ((Quote) D.top()).getDay(); Q[i].setSpan(i - prevHigh); // compute and store the span D.push(Q[i]); // add to the stack the current quote } }