1

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

{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)并且它们也不能相同。通过比较两个数字并查看它们是否相等可以很容易地做到不一样,但是我在第一个要求方面遇到了麻烦。

4

6 回答 6

6

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

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}
于 2012-07-10T15:55:43.073 回答
2

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

List<Pair> pairs = new ArrayList<Pair>();
for (int i : set1) {
    for (int j : set2) {
        pairs.add(new Pair(i, j));
    }
}
于 2012-07-10T14:46:49.593 回答
0

通常你会像这样遍历两个数组:

for (int element1 : array1) {
   for (int element2 : array2) {
      .....
   } 
}
于 2012-07-10T14:47:28.853 回答
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);
        }
    }
于 2012-07-10T14:54:43.140 回答
0

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

for(int i = 0; i < array1.length; i++)
{
    for(int j = i + 1; j < array2.length; j++)
    {
        //do stuff
    }
}
于 2012-07-10T14:59:45.553 回答
0

您希望将一对对象视为可比较对象,然后创建一组对。请注意,使用此解决方案,您需要将数组存储为对象(例如 Integer)而不是基元(例如 int)。检查将原始 long 数组转换为 Long 列表以获取更多信息。

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);
  }
}
于 2012-07-10T15:42:29.840 回答