我想比较相同List (The List "list)
中的元素,如果它们是相同的打印出来的一行,我对编程很新,我还没有完全理解差异在列表和数组之间以及使用它们时。
有人建议使用下面的代码,虽然它没有任何内容正在打印出来。由于我的数组中有两对,我希望至少打印一次。任何帮助都将非常感谢!
List<Double> list = new ArrayList<Double>();
while (search.find()){
list.add(Double.parseDouble(search.group(1)));
}
for(int i= 0 ; i < list.size()-1; i++){
//System.out.println(list.get(i)); // Successfully prints out all doubles in the SHADING:BUILDING:DETAILED class
for(int k = i+1 ; k < list.size() ; k++){
if(list.get(i) == list.get(k)){
System.out.println(i + "and" + k + "are pairs");
}
}
}
}
}
答案 0 :(得分:2)
你对比较进行编码的方式会重演。此外,这不是您访问列表中元素的正确方法,我很害怕。
例如,假设您有i = 0(例如值为2.0)和k = 2(值5.2),但稍后您有i = 2(5.2)和k = 0(2.0),这是相同。我建议你这样做,这可以避免这种重复。
for (int i = 0; i < list.size()-1; i++)
for (int k = i+1; k < list.size(); k++)
if(list.get(i) == list.get(k))
System.out.println(i + " and "+ k +" are pairs");
当然,您必须确保列表的大小大于1,否则会抛出OutOfBoundsException。 希望这有助于^^
编辑#2。编辑#2 如果它包含一个null-safe equals:,请尝试使用以下命令if(Objects.equals(list.get(i), list.get(k)))
答案 1 :(得分:1)
首先,您应该修复:
if(list[i]= list[k]){
成为:
if(list.get(i) == list.get(k)){
其次,您应该添加一个条件以确保i != k
(换句话说 - 您不会将元素与自身进行比较。
第三,您不能像以下那样访问列表:list[i]
您应该使用list.get(i)
答案 2 :(得分:1)
您可以使用以下代码:
public void compareElementToList() {
List<Double> list = Arrays.asList(1.0, 1.2, 1.3, 1.4, 1.0);
for (int i = 0; i < list.size(); i++) {
Double itemI = list.get(i);
for (int j = 0; j < list.size(); j++) {
Double itemJ = list.get(j);
if (i != j) {
if (itemI.compareTo(itemJ) == 0) {
System.out.println("Element " + i + " and " + j + " are pairs.");
} else {
System.out.println("There are no even elements.");
}
} else {
System.out.println("Element omited.");
}
}
}
}
答案 3 :(得分:0)
列表基本上只是一个可变长度数组。您可以使用get(int)方法从中获取数据,该方法从列表中获取第n个值并设置(int,Object)以将第n个值设置为给定对象。
javadocs是你的朋友。 http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html