当前位置: 首页 > 面试题库 >

Java-ArrayList元素的置换(整数)-无法使其正常工作

翟聪
2023-03-14
问题内容

我一直在四处寻找解决问题的方法。我解决了很多问题,但是这个问题仍然困扰着我:S很长一段时间以来,我一直没有接触过Java编程(一般而言,编程),所以请谅解!;)

我的目标是从整数数组中获得所有可能的组合。当我将以下代码应用于整数{1、2、3、4}的测试数组时,我期望具有:
1 2 3 4
1 2 4 3
1 3 2 4
1 3 4 2
2 1 3 4
2 1 4 3
(…),
但是我得到的是
1 2 3 4
1 2 3 4 4 3
1 2 3 4 4 3 3 2 4

有人有线索,建议甚至解决方案吗?提前致谢!

public class Calculation{
(...)
  public void Permute(ArrayList<Integer> soFar,ArrayList<Integer> rest){
    if(rest.isEmpty())    this.fillMatrice(convertIntegers(soFar)); // there it goes in a previously created arrow of int
    else{
        for(int k=0;k<rest.size();k++){
            ArrayList<Integer> next=new ArrayList<Integer>();
            next=soFar;
            next.add(rest.get(k));
            ArrayList<Integer> remaining=new ArrayList<Integer>();
            List<Integer> sublist = rest.subList(0, k);
            for(int a=0;a<sublist.size();a++)   remaining.add(sublist.get(a));
            sublist = rest.subList(k+1,rest.size());
            for(int a=0;a<sublist.size();a++)   remaining.add(sublist.get(a));
            Permute(next,remaining);
        }
    }
}
public static ArrayList<Integer> convertArray(int[] integers){
    ArrayList<Integer> convArray=new ArrayList<Integer>();
    for(int i=0;i<integers.length;i++)  convArray.add(integers[i]);
    return convArray;
}
public static int[] convertIntegers(List<Integer> integers){
    int[] ret = new int[integers.size()];
    for(int i=0;i<ret.length;i++)   ret[i]=integers.get(i).intValue();
    return ret;
}
public Calculation() {
    (...)
    ArrayList<Integer> soFar=new ArrayList<Integer>();
    int[] test={1,2,3,4};
    Permute(soFar,convertArray(test));
}

问题答案:

您可以尝试Recursion解决此问题:

public static void printPermutations(int[] n, int[] Nr, int idx) {
    if (idx == n.length) {  //stop condition for the recursion [base clause]
        System.out.println(Arrays.toString(n));
        return;
    }
    for (int i = 0; i <= Nr[idx]; i++) { 
        n[idx] = i;
        printPermutations(n, Nr, idx+1); //recursive invokation, for next elements
    }
}

可以从此链接获得更多信息:
组合:生成所有“状态”-数组组合

您也可以在此处复制相同的逻辑。



 类似资料:
  • 我已经找了很多地方来解决我的问题。我解决了很多问题,但这个问题仍然困扰着我: S我已经很久没有接触Java编程了(一般编程),所以请理解!;) 我的目标是从整数数组中得到所有可能的组合。当我使用以下代码应用于整数{1,2,3,4}的测试数组时,我希望得到: 1 2 3 4 12 4 3 13 2 4 2 1 3 4 2 1 4 3 (…) 但我得到的是 11 2 3 4 1 3 4 4 4 3 3

  • 问题内容: 我有一个包含一些字段的JPanel。JPanel的高度是有限的,因此我必须在其周围放置一个JScrollPane以便人们向下滚动。 如下所示,它完美显示。但是您无法向下(或向上)滚动。 详细信息面板: 问题答案: 您的DetailPanel没有与之关联的布局管理器,这意味着在您向其添加子项时它不会扩展,这意味着JScrollPane没有任何可滚动的地方。调用DetailPanel或重写

  • 问题内容: 这是我的代码。 这应该返回,但实际上正在返回。为什么这不起作用? 问题答案: 不支持正则表达式,请使用:

  • 问题内容: 这真让我抓狂。我在具有以下结构的文件夹中有一个NetBeans项目: 在src中,我的代码在软件包中。我想做的是使用 来自com.my.package包中的类,但它只是拒绝工作!“ new.png”图像位于资源文件夹中。我在这里想念什么吗? 经过大量的游玩并四处移动“ new.png”图像以查看何时可以找到该图像,它终于可以工作了,但仅当我将图像放入build文件夹时才可以。那么,我该

  • 问题内容: 考虑以下方法,该方法将返回一个字段(如果存在)或递归调用自身直到找到该字段: 虽然这可行,但我想可以将其缩短为: 但是奇怪的是,该部分似乎总是被调用。 我在这里想念什么? 问题答案: 方法的参数始终在调用方法之前进行求值。您想要带一个仅在不存在时才被调用的: