您的位置首页百科问答

Java算法

Java算法

的有关信息介绍如下:

问题补充说明:我现在两个数组X[i],Y[i] 代表XY轴吧表示如图 两个数组都是double数据类型  然后找他他们的拐点 拐点判断条件如图 将得到的拐点的X[i] Y[i] 赋值给两个新的数组K[i] J[i]    得出新的拐点后 将K[i]的数保留小数点后1位后将重复的K[i]删除 同时赋值给一个新的Knew[i] 同时对应的J[i]也要赋值一个新的 给个核心代码参考下 麻烦各位大神了 想了挺久 一直报错 万分感谢

Java算法

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;

    }

}