Java 如何仅循环组合一次?

Java 如何仅循环组合一次?,java,arrays,loops,for-loop,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,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}
{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,它们也不能相同。通过比较两个数字并查看它们是否相等,可以很容易地做到不一样,但我在第一个要求上遇到了问题。

如果您试图从集合1和集合2中找到所有可能的无序对,那么只需执行以下操作:

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

如果您试图从集合1和集合2中找到所有可能的无序对,则只需执行以下操作:

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

通常在两个数组上循环,如下所示:

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

通常在两个数组上循环,如下所示:

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

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

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

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

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

您希望将一对对象视为可比较对象,然后创建一组对象对。请注意,使用此解决方案,您将需要将数组存储为对象,例如整数,而不是原语,例如int。请查看更多相关信息

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

您希望将一对对象视为可比较对象,然后创建一组对象对。请注意,使用此解决方案,您将需要将数组存储为对象,例如整数,而不是原语,例如int。请查看更多相关信息

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

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

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]+"}");

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

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]+"}");

看起来像两个数组。你在寻找什么样的结果?你想从一个整数数组中每对整数中取一个吗?@GustavKarlsson I添加了一个预期输出和当前值output@Pshemo我添加了预期输出和当前输出,以尝试提供帮助。代码只是一个简单的数组循环,看起来像两个数组。你在寻找什么样的结果?你想从一个整数数组中每对整数中取一个吗?@GustavKarlsson I添加了一个预期输出和当前值output@Pshemo我添加了预期输出和当前输出,以尝试提供帮助。代码只是一个简单的数组循环。我会将该列表改为集合,让Pair实现一个适当的equals,可能是hashcode。@GustavKarlsson您的意思是:?我会将该列表改为集合,让Pair实现一个适当的equals,可能是hashcode。@GustavKarlsson您的意思是:?