工作中遇到要在Excel中生成一个burning down chart,需要产生整型的等差数列作为工作完成的百分比,但是,如16列(100除以16,不能整除)怎么生成一个等差数列呢(100- 0)?这个算法我在网上找不到啊。其实Excel能生成,但是看不到怎么生成的。于是自己编了一个。(如果大家找到,请告诉我)
下载地址:点击打开链接 http://download.csdn.net/detail/xuanyuanlei1020/8431841
欢迎下载!!!!(给我点分吧,都快不够使得啦)。如果嫌麻烦,下面可以复制粘贴!!
import java.util.ArrayList;
import java.util.Collections;
public class ArithmeticSequence
{
public static void main(String[] args)
{
/**
* 100 50 0 则columnNum = 2;
*/
int columnNum = 16;
ArrayList<Integer> arithmeticSequenceArr = getArithmeticSequence(columnNum);
for (int i = 0; i <= columnNum; i++)
{
System.out.println("line:" + (i + 1) + " "
+ arithmeticSequenceArr.get(i));
if(i == columnNum) continue;
}
}
private static ArrayList<Integer> getArithmeticSequence(int columnNum)
{
ArrayList<Integer> arr = new ArrayList<Integer>();
int remain = 100;
int quotient = 100 / columnNum;
int remainder = 100 % columnNum;
System.out.println("quotient=" + quotient + " remainder=" + remainder);
ArrayList<Integer> subtracterArr = new ArrayList<Integer>();
ArrayList<Integer> subtracterArrS = new ArrayList<Integer>();//small
ArrayList<Integer> subtracterArrB = new ArrayList<Integer>();//big
/**
* 得到等差数列
*/
for (int i = 0; i <= columnNum; i++)
{
arr.add(remain);
if(i == columnNum) continue;
remain -= remain / (columnNum - i);
}
System.out.println("arr.size()="+arr.size());
if(remainder != 0)
{
ArrayList<Integer> arr2 = new ArrayList<Integer>();
/**
* 得到每一个减数,但是没有想到办法去将少的减数按一定规律去插到多的减数中去。
*/
for (int i = 0; i < columnNum; i++)
{
int subtracter = arr.get(i) - arr.get(i + 1);
System.out.println(i+1+" "+subtracter);
subtracterArr.add(subtracter);
}
/**
*
*/
int index = subtracterArr.indexOf(subtracterArr.get(0) + 1);
System.out.println("index:" + index);
/**
* small one
*/
for (int i = 0; i < index; i++)
{
subtracterArrS.add(subtracterArr.get(i));
}
/**
* big one
*/
for (int i = index; i < subtracterArr.size(); i++)
{
subtracterArrB.add(subtracterArr.get(i));
}
System.out.println("small arr size:"+subtracterArrS.size()+
"big arr size:"+subtracterArrB.size());
int times = 0;
/**
* the small subtracters is more than the big subtracters.
*/
if(index > columnNum / 2)
{
times = index / (columnNum - index);
System.out.println("small times:"+times);
int small = subtracterArrS.get(0);
int big = subtracterArrB.get(0);
while(!subtracterArrS.isEmpty() || !subtracterArrB.isEmpty())
{
if(!subtracterArrB.isEmpty())
{
arr2.add(big);
subtracterArrB.remove(0);
}
for (int j = 0; j < times; j++)
{
if(!subtracterArrS.isEmpty())
{
arr2.add(small);
subtracterArrS.remove(0);
}
}
}
}
else
{
times = (columnNum - index) / index;
System.out.println("big times:"+times);
int small = subtracterArrS.get(0);
int big = subtracterArrB.get(0);
while (!subtracterArrS.isEmpty() || !subtracterArrB.isEmpty())
{
for (int j = 0; j < times; j++)
{
if(!subtracterArrB.isEmpty())
{
arr2.add(big);
subtracterArrB.remove(0);
}
}
if(!subtracterArrS.isEmpty())
{
arr2.add(small);
subtracterArrS.remove(0);
}
}
}
remain = 100;
arr.set(0, remain);
for (int i = 0; i < arr2.size(); i++)
{
System.out.println("arr2:"+arr2.get(i));
remain -= arr2.get(i);
arr.set(i + 1, remain);
}
}
return arr;
}
}
好吧,就这么多。