给定一个double数组和一个值,求出数组中某几个数的和等于给定的值java
import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; public class Test { public static void main(String[] args) { // 测试 double[] doubles = {1.11, 2.22, 3.33, 4.44, 5.55, 6.66, 7.77, 8.88, 9.99}; List<List<Double>> lists = calculate(doubles, 9.99); for (List<Double> list : lists) { for (Double aDouble : list) { System.out.print(aDouble + " "); } System.out.println(); } } /*** * 给定一个double数组和一个值,求出数组中某几个数的和等于给定的值。 * @param doubles 给定的数组 * @param dn 给定的值 * @return 计算的结果 */ public static List<List<Double>> calculate(double[] doubles, Double dn) { List<Double> list = new ArrayList<>(doubles.length); for (double aDouble : doubles) { list.add(aDouble); } List<List<Double>> ret = new ArrayList<>(); int a = 1, c = 1; List<Double> d; for (int i = 0; i < list.size(); i++) { double s = list.get(i); //StringBuffer str = new StringBuffer(list.get(i) + "+"); boolean bb = true; while (bb) { if (bb = false) { break; } if (list.size() == a) { break; } while (true) { if (list.size() == c) { a++; c = a; break; } d = new ArrayList<>(); d.add(list.get(i)); for (int j = c; j < list.size(); j++) { s = add(s, list.get(j)); d.add(list.get(j)); //str.append(list.get(j) + "+"); //System.out.println(str.substring(0, str.length() - 1)); String d1 = Double.toString(s); String d2 = Double.toString(dn); if (d2.equals(d1)) { ret.add(d); break; } if (list.size() - j == 1) { s = list.get(i); //str = new StringBuffer(list.get(i) + "+"); c++; break; } } } } } return ret; } private static double add(double v1, double v2) { BigDecimal b1 = new BigDecimal(Double.toString(v1)); BigDecimal b2 = new BigDecimal(Double.toString(v2)); return b1.add(b2).doubleValue(); } }