如何只组合一次组合?

时间:2012-07-10 14:41:00

标签: java arrays loops for-loop

我正在尝试遍历数组,但是我遇到了这个问题。 当我遍历这个数组时:

{1,2,3,4}

我遇到了这个问题:在开始时,我会得到1和4的组合,但是在中间附近我将得到4和1的组合。我怎样才能这样做,所以只接受独特的关系?不能像{1,4}和{4,1}那样。

我正在使用Java,但是它有一些答案,但它们只使用其他语言版本的库。

不幸的是,我无法绕过它想出解决方案。

这是循环遍历数组后的预期输出:

{1, 2}
{1, 3}
{1, 4}
{2, 3}
{2, 4}
{3, 4}

但这是循环数组时实际发生的事情:

{1, 1}
{1, 2}
{1, 3}
{1, 4}
{2, 1}
{2, 2}
{2, 3}
{2, 4}
{3, 1}
{3, 2}
{3, 3}
{3, 4}
{4, 1}
{4, 2}
{4, 3}
{4, 4}

因此,两个要求是该对必须是一个独特的关系(不能有1,2和2,1),它们也不能相同。通过比较这两个数字并查看它们是否相等可以很容易地完成相同的操作,但我遇到了第一个要求的问题。

6 个答案:

答案 0 :(得分:5)

更新后,我假设你正在寻找类似的东西

int[] arr={1,2,3,4};
for (int i=0; i<arr.length; i++)
    for (int j=i+1; j<arr.length; j++)
        System.out.println("{"+arr[i]+","+arr[j]+"}");

输出:

{1,2}
{1,3}
{1,4}
{2,3}
{2,4}
{3,4}

答案 1 :(得分:2)

如果您试图从第一组和第二组中找到所有可能的无序对,那么只需执行以下操作:

List<Pair> pairs = new ArrayList<Pair>();
for (int i : set1) {
    for (int j : set2) {
        pairs.add(new Pair(i, j));
    }
}

答案 2 :(得分:0)

通常你会循环遍历两个数组:

for (int element1 : array1) {
   for (int element2 : array2) {
      .....
   } 
}

答案 3 :(得分:0)

public static void main(String[] args) {
        int[] array1 = new int[] {1,2,3,4};
        int[] array2 = new int[] {5,6,7,8};
        String[] result = new String[array1.length * array2.length];
        int count = 0;
        for (int i : array1) {
            for (int j : array2) {
                result[count++] = "{" + i + ", " + j + "}";
            }
        }
        for (String str : result) {
            System.out.println(str);
        }
    }

答案 4 :(得分:0)

如果要避免重复对,请在外循环中的当前位置开始内循环。

for(int i = 0; i < array1.length; i++)
{
    for(int j = i + 1; j < array2.length; j++)
    {
        //do stuff
    }
}

答案 5 :(得分:0)

您希望将一对对象视为可比对象,然后创建一组对。请注意,使用此解决方案,您需要将数组存储为对象(例如Integer)而不是基元(例如int)。有关详情,请查看Convert an array of primitive longs into a List of Longs

public class MyPair<A extends Comparable<A> > implements Comparable<MyPair<A>> {
  public A first; //You may want to make these private and implement getters, setters, etc
  public A second;
  public MyPair(A f, A s) { first = f; second = s; }
  public int compareTo(MyPair<A> o) {
     int cmp = first.compareTo(o.first);
     if(cmp == 0) cmp = second.compareTo(o.second);
     return cmp;
  }
  public String toString() {
    return "{"+first+","+second+"}";
  }
}

public static void main(String[] args) {
  Integer[] x = new Integer[]{1,2,3,4};
  Integer[] y = new Integer[]{5,6,7,8};
  Set<MyPair<Integer> > mypairs = new HashSet<MyPair<Integer> >();
  for(Integer f : x) 
  {
    for(Integer s : y) {
      MyPair<Integer> tmp = new MyPair<Integer>(f,s);
      mypairs.add(tmp);
    }
  }
  for(MyPair<Integer> pair : mypairs) {
    println(pair);
  }
}