Java组合数学。创建一个用生成的数据对象。

3

这是我在这里发布的第一篇文章。今天我开始使用Java的组合库。

这个库是:https://github.com/dpaukov/combinatoricslib3

我在Excel中有超过10k条三角形边长数据,然后将它们导入到2D整数数组中。

然后我创建了一个名为Triangle的类:

public class Triangle {

private int a;
private int b;
private int c;

public Triangle(int a, int b, int c)
{
    this.a = a;
    this.b = b;
    this.c = c;
}

public boolean isCorrect()
{
    if(this.a + this.b > this.c)
        return true;

    return false;
}

我的问题是我可以生成所有可能的三角形组合,但不知道如何创建三角形对象。只知道如何打印结果。

public static void main(String[] args) throws IOException {


    Generator.combination(sides).simple(3).stream().forEach(System.out::println);



}

谢谢您的提前帮助。干杯!

编辑:

这是边缘的例子:

static final int[][] sides = new int[][]{

        {71, 100, 1231, 832, 127},
        {336, 447, 815, 658, 373},
        {126, 444, 556, 221, 1322},
        {1226, 662, 985, 87, 991},
        {555, 512, 111, 339, 22},
    };

我希望能够使用这些数据生成所有可能的三角形。

需要记住的一件事是:你在很多地方都使用了 int,而一些流式调用可能会进行自动装箱。因此,请注意在 int 和 Integer 之间切换可能存在潜在的隐藏性能成本。 - GhostCat
1个回答

1
应该像这样:

应该看起来像这样:

Generator
.combination(sides)
.simple(3)
.stream()
.forEach(
     sides -> new Triangle(sides[0],sides[1],sides[2])
);

请注意,这意味着边缘是整数,如果不是(例如字符串),您可能需要另外转换(映射)为适当的类型。
现在,如果您想将它们全部收集到列表中,可以执行以下操作:
List<Triangle> triangles = Generator
    .combination(sides)
    .simple(3)
    .stream()
    .map(sides -> new Triangle(sides[0],sides[1],sides[2]))
    .collect(Collectors.toList())

你可以遍历一个二维 int[][] 数组,并找到每个的所有组合,就像这样:
Arrays.stream(sides)
    .forEach(
    line -> {
         Generator.combination(Arrays.stream(line).boxed().collect(Collectors.toList()))
        .simple(3)
        .stream()
        .forEach(System.out::println);
    }
);

请提供您原始代码输出的示例(例如_forEach(System.out::println)_),只需几行即可。 - zeppelin
我刚刚注意到它没有打印我的数字。 - whiskermrr
顺便说一下,这是原始代码。使用sides数组作为临时帮助,而不是从Excel中使用10k个整数。 - whiskermrr
据我所知,Generator.combination(sides)期望的是一个扁平化的参数列表,而不是一个二维数组,就像你现在拥有的一样(至少根据javadoc所说)。试试这样:Generator.combination(71, 100, 1231, 832, 127) .....看看它是否适用于你。 - zeppelin
我的老师用二维数组展示了一个例子。但是他创建了四边形。这只是实现上的问题。 - whiskermrr
我已经提供了一个示例,演示如何迭代遍历您的二维数组中的所有行,并找到每行的所有组合(请参见更新)。现在您知道如何做到这一点,以及如何创建三角形对象,您应该能够很好地完成您的任务(不会把所有乐趣都带走;))。 - zeppelin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接