当前位置: 首页 > 知识库问答 >
问题:

在java中组合三个变量

饶骁
2023-03-14

我有一个问题要用java来解决。

我的代码有三个变量:a、b、c,分别是双精度的。所有变量之和必须等于1。

我需要测试这些变量中所有可能的组合,值从0.10变化

示例:

组合1:

a = 0.20
b = 0.20
c = 0.60

组合2:

a = 0.10
b = 0.10
c = 0.80

然后继续。

是否有任何框架或库来自动化这种测试?

共有1个答案

轩辕海
2023-03-14

虽然另一位评论者指出,这可以通过3层嵌套的for循环来实现,但可能有一个更优雅的解决方案,也许可以使用像combinationslib这样的库。然后可以执行以下操作:

    ICombinatoricsVector<BigDecimal> originalVector = 
            Factory.createVector(new BigDecimal[] { 
                    new BigDecimal("0.0"), 
                    new BigDecimal("0.1"), 
                    new BigDecimal("0.2"), 
                    new BigDecimal("0.3"), 
                    new BigDecimal("0.4"), 
                    new BigDecimal("0.5"), 
                    new BigDecimal("0.6"), 
                    new BigDecimal("0.7"), 
                    new BigDecimal("0.8"), 
                    new BigDecimal("0.9")
    });

    Generator<BigDecimal> gen = Factory.createPermutationWithRepetitionGenerator(originalVector, 3);

    for (ICombinatoricsVector<BigDecimal> perm : gen) {
        // values are in perm.getValue(0), perm.getValue(1), and perm.getValue(2)
    }

之后,您可以遍历每个排列并使用深度为1的for循环检查总和。

请注意,为了解决浮点精度/表示问题,我用BigDecimal替换了float。进一步注意,我使用了BigDecimal的字符串构造函数来避免同样的精度/表示问题。

 类似资料:
  • 我必须融合之前排序的2个数组,我必须为学校做这件事,但我可以有人可以帮助我,因为现在我要求数组的维度,我实例化了数组,然后我做了一个for来填充它们,我添加了数组的排序,我将把我的代码粘贴到这里。(评论是意大利语)我知道对一些人来说这可能是一个愚蠢的问题,但是,我在编程的第一年,我想提高自己。我提前感谢帮助我的人

  • 我有很多海面温度NetCDF文件,具有相同的纬度和纬度,但时间变量不同。我想尝试通过组合时间变量将其组合成一个NetCDF文件,因为每个NetCDF文件中的时间变量是连续的 有没有更有效的方法?因为在CDO(气候数据操作员)中,我无法进行循环 下面是我使用的文件名的一个例子 带模式sstdas_(年)(月)(dekad)

  • 我有一个问题。 我想做的是迭代tmpList,找到身高和体重的总和,并在名称为空时添加“No Name”。 我已经工作到目前为止,这似乎是不对的。我是说我必须重复每个案例。 有没有办法把它们结合在一起?或者有什么更好的建议?

  • 问题内容: 我有一些String []数组,例如: 如何混合它们,以便得到(a的0个元素,然后b,c,a,b,c的1个元素,依此类推)?谢谢 更准确地说,结果数组必须包含第一个数组的第一个值,然后是第二个数组的第一个值,…,最后一个数组的第一个值,第一个数组的第二个值,…,最后一个数组的第二个值,…,最大数组的最后一个值。如果数组的大小不同,则不会考虑较小的数组。 这是一个例子: 另外,我想结合可

  • 我知道类似的问题也有人问过,我也研究过很多网站。我已经尝试使用一些答案,但我的代码仍然不能工作。 我正在经历以前的作业,以帮助建立我的Java知识。请原谅我的代码中的任何错误,我还在学习Java。 假设两个输入数组中的元素都按非递减顺序排序(例如[0,1,2,2]和[1,2,3,3,4,5])。返回的“合并”数组必须保留此属性(例如[0,1,1,2,2,2,3,3,4,5])。 输入和输出都允许重

  • 问题内容: 我见过类似的问题,但没有一个提供我所要的答案,因此,如果这被认为是重复的,我在此致歉。我正在尝试将数组{1,2,3}和{4,5,6}合并为{1,2,3,4,5,6}。我做错了什么?我是java的新手。抱歉,问题很愚蠢。 问题答案: 代替 您需要调用merge方法,并将结果分配给数组,例如: 您的for循环也应该是: