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

Java -数组列表元素的排列(整数)-不能让它正常工作

许博达
2023-03-14

我已经找了很多地方来解决我的问题。我解决了很多问题,但这个问题仍然困扰着我: 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 3 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));
}

共有2个答案

阙奇思
2023-03-14

您可以尝试使用< code >递归来解决这个问题:

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
    }
}

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

您也可以在这里复制相同的逻辑。

傅旺
2023-03-14

试试这个,它似乎有效,它使用递归。

public class Permute {

    public static List<List<Integer>> permute(Integer...myInts){

        if(myInts.length==1){
            List<Integer> arrayList = new ArrayList<Integer>();
            arrayList.add(myInts[0]);
            List<List<Integer> > listOfList = new ArrayList<List<Integer>>();
            listOfList.add(arrayList);
            return listOfList;
        }

        Set<Integer> setOf = new HashSet<Integer>(Arrays.asList(myInts));   

        List<List<Integer>> listOfLists = new ArrayList<List<Integer>>();

        for(Integer i: myInts){
            ArrayList<Integer> arrayList = new ArrayList<Integer>();
            arrayList.add(i);

            Set<Integer> setOfCopied = new HashSet<Integer>();
            setOfCopied.addAll(setOf);
            setOfCopied.remove(i);

            Integer[] isttt = new Integer[setOfCopied.size()];
            setOfCopied.toArray(isttt);

            List<List<Integer>> permute = permute(isttt);
            Iterator<List<Integer>> iterator = permute.iterator();
            while (iterator.hasNext()) {
                List<java.lang.Integer> list = iterator.next();
                list.add(i);
                listOfLists.add(list);
            }
        }   

        return listOfLists;
    }

    public static void main(String[] args) {
        List<List<Integer>> permute = permute(1,2,3,4);
        System.out.println(permute);
    }

}

如果你不喜欢名单

 类似资料:
  • 我做了一个代码,应该显示数组中元素排列的整个组合。 应该是什么: 123 213 231 132 312 321 但结果是这样的: 231 312 123 231 312 123 如何以应有的方式进行排列?

  • 我有下面的代码- 是包含int属性的类对象列表-参考号:即

  • 我是Java和Stack Overflow的新手,我有一个关于排列的问题。 方法:我使用中的对象生成。每个的大小从(可能最小为1)到,并包含具有唯一名称属性的自定义生成对象。 问题:现在我的问题是如何在我的外部(y轴)中获得从第一个到最后一个的所有可能对象组合的排列(我想我们可以说这是x轴)? 我试着举一个简单的例子: : 1.1|1.2|1.3 : 2.1 : 3.1|3.2 这里,这些位于外部

  • 我有一个点列表,每个点都是一个大小为2的小列表。我想按x的递增顺序对点列表进行排序,如果x值相等,我就按y的递减顺序排序来打破平局。 我编写了一个自定义比较器来对点进行排序,如下所示: 以下是排序前的输入: 以下是使用上述比较器排序后产生的结果: 观察:- 输入按x的升序排序。 (5,12)被正确地放在(5,10)之前 (9,-15)被正确地放在(9,-1000)之前 然而,(10001,-10)

  • 我试图将输入与arraylist中的值进行比较。 前任;我有一个arraylist: 数组的每个索引在我的程序中代表一个唯一的属性。e、 g索引0代表,索引1代表等。如果我做返回第二个数组。 我正在尝试将与每个数组中的第二个元素进行比较。所以假设我运行这个,我希望它遍历每个数组中的每个[1],如果该索引匹配,则返回true。 因此,我希望它将'number'(1102)与每个第一个索引元素进行比较

  • 我已经为基于数组的队列编写了一个代码。它的行为非常奇怪,就像我使用for循环将0,1,2,3,4排队一样,但是插入队列的是0,0,1,2,3。 另外,出列时会抛出,我不知道为什么。 我使用的排队逻辑是,我把元素放在一个简单的数组中。额外的一点是,如果大小接近容量的一半,我会增加数组的容量。 对于出列,如果大小小于容量的三分之一,我将减小容量。我还为popped保留了一个计数器,它从数组的开头弹出元