当我在New direction
arrayList中找到第二个mergeArray
值时,我正在尝试将标记3
添加到arrayList buffer
,但我总是得到第一个3
1}} ArrayList中的值。我怎样才能在阿姆斯特丹之后获得第二个?
我感谢任何帮助。
输出:
paris
3
water
ball
money
Amsterdam
3
door
输出应如下所示:
paris
3
water
ball
money
New direction
Amsterdam
3
door
代码:
public static void main(String[] args) {
ArrayList<String> buffer = new ArrayList<String>();
ArrayList<String> mergeArray = new ArrayList<String>();
String route = "3";
String direction = "paris";
String start = "Amsterdam";
buffer.add("paris");
buffer.add("3");
buffer.add("water");
buffer.add("ball");
buffer.add("money");
buffer.add("Amsterdam");
buffer.add("3");
buffer.add("door");
for (String line : buffer) {
if (line.equals(route)) {
mergeArray.add(line);
int index = buffer.indexOf(line);
String prevElement = buffer.get(index - 1);
if (prevElement == direction) {
String addElem = buffer.get(index + 1);
mergeArray.add(addElem);
} else if (prevElement == start) {
mergeArray.add("New direction");
}
}
}
for (String key : mergeArray) {
System.out.println(key);
}
}
答案 0 :(得分:1)
请勿使用indexOf
,因为它始终会检索首次出现的索引。
保留一个辅助索引变量并在循环中使用它:
int auxIndex = 0;
for (String line : buffer) {
if (line.equals(route)) {
mergeArray.add(line);
String prevElement = buffer.get(auxIndex - 1);
if (prevElement.equals(direction)) {
String addElem = buffer.get(auxIndex + 1);
mergeArray.add(addElem);
} else if (prevElement.equals(start)) {
mergeArray.add("New direction");
}
}
auxIndex++
}
还添加安全检查,以便索引不会过度/过流
答案 1 :(得分:0)
尝试使用clasic而不是使用Iterable
for (int i=0; i<buffer.size(); i++) {
String line = buffer.get(i);
if (line.equals(route)) {
mergeArray.add(line);
String prevElement = buffer.get(i - 1);
if (prevElement == direction) {
String addElem = buffer.get(i + 1);
mergeArray.add(addElem);
} else if (prevElement == start) {
mergeArray.add("New direction");
}
}
}
另外,请考虑检查上溢/下溢问题。你引用的是index-1和index + 1,如果外观位于第一个或最后一个位置,将会引起麻烦。