Hi, ive worked out an algorithm. you will need to experiment with variables in the main method ->>>
findBoundaries fb = new findBoundaries(prices, 8,10);
prices = collection of prices
8 = number of categories, this doesnt really return the correct number so just experiment with this number.
10 = the multples in which the boundaries are calculated, atm its 10, so it will return results like 1-10 , 21-30 etc.. again experiment
here is the code
Code:
import java.util.*;
public class findBoundaries{
private ArrayList prices;
private int rangeFreq;
private int multiple;
public findBoundaries(ArrayList prices, int rangeFreq, int multiple){
this.prices = prices;
this.rangeFreq = rangeFreq;
this.multiple = multiple;
sortPrices();
}
public void sortPrices(){
Collections.sort(prices);
}
public int countRange(int low, int high) {
int count = 0;
Iterator counta = ((ArrayList)prices.clone()).iterator();
while(counta.hasNext()) {
int value = ((Integer)counta.next()).intValue();
if(value>high) break;
if(value >= low) {
count++;
}
}
return count;
}
public void printNiceBoundary(){
int priceSize = prices.size();
int loop = priceSize/rangeFreq;
int mod = priceSize%rangeFreq;
int finalPrice = getFinalPrice(((Integer)prices.get(priceSize-1)).intValue());
System.out.println("We have found "+priceSize +" products: ($0 - $"+finalPrice+")\n");
int range = multiple;
int boundary =0;
for(int ik = 0;ik<rangeFreq;ik++) {
while(countRange(boundary,range)<=(loop +hasMod(mod)) && (range < finalPrice)){
range +=multiple;
}
int productRangeCount =countRange(boundary,(range));
System.out.println((ik+1)+". $"+boundary +" - $"+ (range) +"("+productRangeCount+")");
mod+=(loop-productRangeCount);
boundary = range+1;
if(boundary>finalPrice) break;
}
}
public int hasMod(int mod){
if(mod>0) {
return 1;
}
return 0;
}
public int getFinalPrice(int price) {
int i =price;
while(i%multiple !=0) {
i++;
}
return i;
}
public static void main(String[] args) {
ArrayList prices = new ArrayList();
prices.add(new Integer(1)); prices.add(new Integer(43)); prices.add(new Integer(47)); prices.add(new Integer(50));
prices.add(new Integer(52)); prices.add(new Integer(40)); prices.add(new Integer(42)); prices.add(new Integer(43));
prices.add(new Integer(43)); prices.add(new Integer(56)); prices.add(new Integer(92)); prices.add(new Integer(603));
prices.add(new Integer(43)); prices.add(new Integer(78)); prices.add(new Integer(21)); prices.add(new Integer(32));
prices.add(new Integer(223)); prices.add(new Integer(178)); prices.add(new Integer(121)); prices.add(new Integer(432));
prices.add(new Integer(413)); prices.add(new Integer(3)); prices.add(new Integer(2)); prices.add(new Integer(12));
prices.add(new Integer(53)); prices.add(new Integer(88)); prices.add(new Integer(11)); prices.add(new Integer(92));
prices.add(new Integer(1)); prices.add(new Integer(43)); prices.add(new Integer(47)); prices.add(new Integer(50));
prices.add(new Integer(153)); prices.add(new Integer(41)); prices.add(new Integer(44)); prices.add(new Integer(143));
prices.add(new Integer(143)); prices.add(new Integer(56)); prices.add(new Integer(92)); prices.add(new Integer(603));
prices.add(new Integer(143)); prices.add(new Integer(78)); prices.add(new Integer(21)); prices.add(new Integer(32));
prices.add(new Integer(2123)); prices.add(new Integer(179)); prices.add(new Integer(1921)); prices.add(new Integer(432));
prices.add(new Integer(413)); prices.add(new Integer(3)); prices.add(new Integer(2)); prices.add(new Integer(12));
prices.add(new Integer(53)); prices.add(new Integer(88)); prices.add(new Integer(11)); prices.add(new Integer(92));
prices.add(new Integer(1)); prices.add(new Integer(43)); prices.add(new Integer(47)); prices.add(new Integer(50));
prices.add(new Integer(52)); prices.add(new Integer(40)); prices.add(new Integer(42)); prices.add(new Integer(43));
prices.add(new Integer(43)); prices.add(new Integer(56)); prices.add(new Integer(92)); prices.add(new Integer(603));
prices.add(new Integer(43)); prices.add(new Integer(78)); prices.add(new Integer(21)); prices.add(new Integer(32));
prices.add(new Integer(223)); prices.add(new Integer(178)); prices.add(new Integer(121)); prices.add(new Integer(432));
prices.add(new Integer(413)); prices.add(new Integer(3)); prices.add(new Integer(2)); prices.add(new Integer(12));
prices.add(new Integer(53)); prices.add(new Integer(88)); prices.add(new Integer(11)); prices.add(new Integer(92));
findBoundaries fb = new findBoundaries(prices, 8,10);
fb.printNiceBoundary();
}
}
here are some sample outputs
---------(8,10)-------------
We have found 84 products: ($0 - $2130)
1. $0 - $20(15)
2. $21 - $50(27)
3. $51 - $80(11)
4. $81 - $130(11)
5. $131 - $420(12)
6. $421 - $2130(8)
----------(8,20)----------------------
We have found 84 products: ($0 - $2140)
1. $0 - $20(15)
2. $21 - $60(35)
3. $61 - $100(12)
4. $101 - $240(11)
5. $241 - $2140(11)
---------(8,5)-----------------
We have found 84 products: ($0 - $2125)
1. $0 - $15(15)
2. $16 - $45(21)
3. $46 - $55(11)
4. $56 - $95(15)
5. $96 - $225(11)
6. $226 - $2125(11)
--------(5,50)--------------------
We have found 84 products: ($0 - $2150)
1. $0 - $50(42)
2. $51 - $100(20)
3. $101 - $450(17)
4. $451 - $2150(5)
---------(5,100)------------
We have found 84 products: ($0 - $2200)
1. $0 - $100(62)
2. $101 - $500(17)
3. $501 - $2200(5)
if you have any questions or request on the code, just post
