我正在尝试迭代并组合列表中的值。我的清单是[A,B,C,D]。我正在寻找输出以下内容的方法。
AB
AC
AD
BC
BD
CD
这是我的代码:
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
for (int i = 0; i<list.size()-1; i++){
for (int k = 0; k<list.size()-1; k++){
if (list.get(i)!=list.get(k+1)){
System.out.println(list.get(i)+list.get(k+1));
}
}
}
代码输出
AB
AC
AD
BC
BD
CB //Note this value: I already have BC -- and I consider BC==CB
CD
我不确定扫描仪是否可以选择...... 如果我在列表中有更多元素,它会变得更加混乱。列表中的更多项目意味着更多重复项,例如xx,yy,xy yx。
答案 0 :(得分:2)
List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
for (int x = 0; x < list.size() - 1; x++){
for (int y = x + 1; y < list.size; y++){
System.out.println(list.get(x) + list.get(y);
}
}
内部循环应该从外部循环的索引+ 1开始,然后继续直到列表的末尾。假设您在list
同样要比较字符串,您需要使用.equals()
。 ==
如果是两个不同的false
个实例,则总是评估为String
,即:
String a = "apple" //Same value but twi different String instances
String b = "apple"
System.out.println(a==b) // Prints false
System.out.println(a.equals(b)) Prints true
==
运算符会比较对象引用而非值,其中.equals()
会比较值两个对象。因此==
将检查这两个对象是否引用相同的String
实例。
答案 1 :(得分:0)
将第二个for循环更改为从i+1
进行迭代。这应该给出所有的排列。这是改变的for循环:
for (int i = 0; i < list.size() - 1; i++)
{
for (int k = i+1; k < list.size(); k++)
{
System.out.println(list.get(i)+list.get(k));
}
}