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您的意思是:?