繁体   English   中英

乘以双数组中的数字

[英]Multiply numbers in double array

我有一个双精度数组列表,我想将数字相乘,以便每个相乘的数字与其他因素不在同一行,并且乘积必须由每行的 1 个数字组成。 由于它是一个双 arrayList,因此行的长度不同。 任何帮助表示赞赏。

假设这是数组列表

1.0 , 2.0

1.0 , 2.0

1.0 , 2.0

数学计算如下 1*1*1 , 1*1*2 , 1*2*1 , 1*2*2, 2*1*1 , 2*1*2 , 2*2*1 , 2*2* 2

我将所有产品保存在一个新的数组列表中,因此数组列表应该保存

1,2,2,4,2,4,4,8

再次感谢!

如果您尝试过,您可能会意识到它很容易?

主意:

  • 逐项循环遍历每个 ArrayList
  • 这些项目的产品添加到 ArrayList

代码:

import java.util.ArrayList;

public class QuickTester {

    public static void main(String[] args) {

        ArrayList<Double> list1 = new ArrayList<Double>();
        ArrayList<Double> list2 = new ArrayList<Double>();
        ArrayList<Double> list3 = new ArrayList<Double>();

        list1.add(1.0);
        list1.add(2.0);

        list2.add(1.0);
        list2.add(3.0);
        list2.add(5.0);

        list3.add(1.0);
        list3.add(2.0);

        int productListSize = list1.size() *
                list2.size() * list3.size();
        ArrayList<Double> productsList =
                new ArrayList<Double>(productListSize);

        for(double i : list1) {         
            for(double j : list2) {         
                for(double k : list3) {

                    productsList.add(i * j * k);
                }
            }
        }

        for(double d : productsList) {
            System.out.print(d + " ");
        }
    }
}

输出:

1.0 2.0 3.0 6.0 5.0 10.0 2.0 4.0 6.0 12.0 10.0 20.0 

使用递归方法:

import java.util.ArrayList;
import java.util.List;

public class DoubleArrayMultiplyRecursion {

    public static void recurMultiply(List<Double> list, double[][] array, int row,
            double result) {
        if (row < 3) {
            for (int j = 0; j < 2; j++) {
                result *= array[row][j];
                recurMultiply(list, array, row+1, result);
            }
        } else {
            System.out.println(result);
            list.add(result);
        }
    }

    public static void main(String[] args) {
        double[][] array = new double[3][2];
        for (int i = 0; i < 3; i++) {
            array[i][0] = 1.0;
            array[i][1] = 2.0;
        }
        List<Double> list = new ArrayList<Double>();
        recurMultiply(list, array, 0, 1);
        for(Double d: list) {
            System.out.print(d+",");
        }
    }
}

输出:

1.0 // from recursion processing
2.0
2.0
4.0
2.0
4.0
4.0
8.0 // from recursion processing
1.0,2.0,2.0,4.0,2.0,4.0,4.0,8.0, // from result list

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM