gpt4 book ai didi

java - 如何动态生成任意大小的整数的所有组合

转载 作者:行者123 更新时间:2023-12-01 11:25:19 25 4
gpt4 key购买 nike

我有这个功能:

public void func1(int d, double delta, double min, double max ) 
{
if( d == 1 )
{
for( double i=min ; i <= max ; i++ )
System.out.println(i);

}

if(d == 2 )
{
for( double i=min ; i <= max ; i++ )
for( int j = min ; j <= max ; j++ )
System.out.println(i, j);

}

if(d == 3 )
{
for( double i=min ; i <= max ; i++ )
for( int j = min ; j <= max ; j++ )
for( int k=min ; k <= max ; k++ )
System.out.println(i, j, k );

}
}

如何使其动态化?即:如何使用 if 语句,以便函数可以与任何给定的 d 一起使用?
目前,如果我希望函数在 d=5 下工作,那么我必须编写五个嵌套的 for 循环并添加一个 if 语句。

最佳答案

你可以使用Recursion的想法来解决这个问题。关键思想是,如果您想要有 d 循环,您可以简单地有一个 for 循环,并且在该 for 循环中您将有一个循环 d - 1 次:

loop(int d) {
for (i = min : max) {
loop(d - 1)
}
}

您可以引用以下示例代码:

public class Main {

public static void main(String[] args) {
func1(3, 1.0, 3.0);
}

private static void func1(int d, double min, double max) {
func1(d, min, max, "");
}

private static void func1(int d, double min, double max, String prefix) {
if (d == 0) {
System.out.println(prefix);
} else {
for (double i = min; i <= max; i++) {
if (d == 1) {
func1(d - 1, min, max, prefix + i);
} else {
func1(d - 1, min, max, prefix + i + ", ");
}
}
}
}
}

更新

我修改了代码,以便返回 double 值数组而不是字符串:

public class Main {

private static List<double[]> combination = new LinkedList<>();
private static double[] tmpArray;

public static void main(String[] args) {
func1(3, 1.0, 3.0);

for (double[] result : combination) {
for (int i = 0; i < result.length; i++) {
if (i != result.length - 1) {
System.out.print(result[i] + ", ");
} else {
System.out.print(result[i]);
}
}
System.out.println();
}
}

private static void func1(int d, double min, double max) {
tmpArray = new double[d];
func2(d, min, max);
}

private static void func2(int d, double min, double max) {
if (d == 0) {
//System.out.println(prefix);
double[] newArray = new double[tmpArray.length];
System.arraycopy(tmpArray, 0, newArray, 0, tmpArray.length);
combination.add(newArray);
} else {
for (double i = min; i <= max; i++) {
tmpArray[d - 1] = i;
func2(d - 1, min, max);
}
}
}
}

关于java - 如何动态生成任意大小的整数的所有组合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30857683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com