Java算法
的有关信息介绍如下:问题补充说明:我现在两个数组X[i],Y[i] 代表XY轴吧表示如图 两个数组都是double数据类型 然后找他他们的拐点 拐点判断条件如图 将得到的拐点的X[i] Y[i] 赋值给两个新的数组K[i] J[i] 得出新的拐点后 将K[i]的数保留小数点后1位后将重复的K[i]删除 同时赋值给一个新的Knew[i] 同时对应的J[i]也要赋值一个新的 给个核心代码参考下 麻烦各位大神了 想了挺久 一直报错 万分感谢
package com..;
import java.math.BigDecimal;
import java.util.ArrayList;
i来自mport java.u360问答til.List;
import java.util.Random;
public class NikeLoTest {
public static void main(String[] args) {
// Create Random Array for X and Y
int size = 50庆完;
do坏免线分uble[] X = getRandomDo伯图京ubles(0, 0.4, s问ize);
do经灯四冷群死硫uble[] Y = getRandomDoubles(0, 9, size);
// pick up value inflection point
List<Double> kList = new ArrayList<>();
List<Double> jList = new ArrayList<>();
for (int i = 0; i < size - 2; i++) { // <- avoid ArrayIndexOutOfBoundsException
i编图天f (isInflection(X, Y, i)) {
kList.add(X[i]);
jList.add(Y[i]);
}
}
// K令自误为[i] J[i]
D呢介马ouble[] K = kList.toArray(new Do者临际uble[kList.si龙众村成服ze()]);
Double[] J = kList.toArray(new D府农另血买迫良女ouble[jList.siz传获在儿府牛完氧心复e()]);
/孔时井粒证京黄娘/ Knew[] Jnew[]
Double[] Knew = roundAndRemoveDuplicateValue(K);
Do打威称械改汉迅督判海uble[] Jnew = r集反行且尼优大oundAndRemoveDuplicateValu田象怀也林过e(J);
}
private static Double[] roundAndRemoveD许uplicateValue(Double[] array) {
List<Double> result = new ArrayList<>();
for (Double d : array) {
BigDecimal tmp = new BigDecimal(d);
tmp = tmp.setScale(1, BigDecimal.ROUND_HALF_UP);
if (!result.contains(tmp.doubleValue())) {
result.add(tmp.doubleValue());
}
}
return result.toArray(new Double[result.size()]);
}
private static boolean isInflection(double[] X, double[] Y, int n) {
return (Y[n + 1] - Y[n]) * (Y[n + 2] - Y[n + 1]) < 0;
}
private static double[] getRandomDoubles(double rangeMin, double rangeMax,
int size) {
double[] array = new double[size];
Random r = new Random();
for (int i = 0; i < array.length; i++) {
array[i] = rangeMin + (rangeMax - rangeMin) * r.nextDouble();
}
return array;
}
}