如果我在arrayList中搜索第5项,我也想获得第4和第6项。这个代码在最后的if语句中提供,定义为(i - 1)和(i + 1)。到目前为止,这是我的代码:
import java.util.ArrayList;
public class PlanetsList {
public static void main(String args[]) {
ArrayList<String> planets = new ArrayList<String>();
String names[] = { "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranis", "Neptune", "Pluto"};
for (int i = 0, n = names.length; i < n; i++) {
planets.add(names[i]);
String value = (String) planets.get(i);
if(value.contains("Mars")) {
String newNum = value.replace(value, "Red planet ");
planets.set(i,newNum);
}
if(value.contains("Uranis")) {
String wordBefore = (String) planets.get(i-1);
String wordAfter = (String) planets.get(i+1);
String newNum = value.replace(value, "Uranus ");
planets.set(i,newNum);
System.out.println("This is the word before " + wordBefore);
System.out.println("This is the word after " + wordAfter);
planets.remove(i-1);
}
}
System.out.println(planets);
}
}
有了这个,我得到一个indexoutofbounds异常,这显然是由最后的if语句中的wordAfter行引起的,并且因为for循环没有遍历整个arrayList。最后的if语句不需要与其他if语句在同一个for循环中,但如果它在不同的循环中,则replace方法必须能够将替换的单词放回正确的位置。
此致
答案 0 :(得分:2)
完成将字符串添加到列表中,然后再次尝试迭代列表以获取逻辑。当get(i+1)
是添加到列表中的最大值时,您正在尝试i
。
答案 1 :(得分:2)
此行导致问题。
String wordAfter = (String) planets.get(i+1);
因为最大索引是i。
如果按以下方式进行检查会更好。
public static void main(String args[]) {
ArrayList planets = new ArrayList();
String names[] = { "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranis", "Neptune", "Pluto"};
for (int i = 0, n = names.length; i < n; i++) {
planets.add(names[i]);
}
for (int i = 0, n = names.length; i < n; i++) {
String value = (String) planets.get(i);
if(value.contains("Mars")) {
String newNum = value.replace(value, "Red planet ");
planets.set(i,newNum);
}
if(value.contains("Uranis")) {
String wordBefore = (String) planets.get(i-1);
String wordAfter = (String) planets.get(i+1);
String newNum = value.replace(value, "Uranus ");
planets.set(i,newNum);
System.out.println("This is the word before " + wordBefore);
System.out.println("This is the word after " + wordAfter);
}
}
System.out.println(planets);
}
答案 2 :(得分:1)
planets.add(names [i]); ...在这一行中只有你向arraylist添加一个值。此时,你的arraylist的大小是i。没有增加i或者向arraylist添加任何值,你试图在i + 1处访问元素。所以它肯定会抛出IOB异常
答案 3 :(得分:1)
我认为这将解决您的问题
您的代码正在提供异常
Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 7, Size: 7
at java.util.ArrayList.rangeCheck(Unknown Source)
at java.util.ArrayList.get(Unknown Source)
at PlanetsList.main(PlanetsList.java:20)
以下是一个工作:
import java.util.ArrayList;
public class PlanetsList {
public static void main(String args[]) {
ArrayList planets = new ArrayList();
String names[] = { "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranis", "Neptune", "Pluto"};
for (int i = 0, n = names.length; i < n; i++) {
planets.add(names[i]);
}
for (int i = 0, n = names.length; i < n; i++) {
String value = (String) planets.get(i);
if(value.contains("Mars")) {
String newNum = value.replace(value, "Red planet");
planets.set(i,newNum);
}
if(value.contains("Uranis")) {
String wordBefore = (String) planets.get(i-1);
String wordAfter = (String) planets.get(i+1);
String newNum = value.replace(value, "Uranus");
planets.set(i,newNum);
System.out.println("This is the word before " + wordBefore);
System.out.println("This is the word after " + wordAfter);
}
}
System.out.println(planets);
}
}
我在您的代码中进行了两处更改:
从以下两行中删除spaces
String newNum = value.replace(value, "Red planet ");
String newNum = value.replace(value, "Uranus ");
答案 4 :(得分:1)
您可以使用Arrays.asList将数组转换为List,然后遍历列表进行处理。无论如何,你应该检查wordBefore和wordAfter的索引是否在List限制范围内。
答案 5 :(得分:1)
我也觉得问题不是不言自明的......但如果你需要在arraylist中的特定项目之前和之后获取元素,你可以这样做。
我的假设是您已经预先填充了值的列表。
String names[] = { "Mercury", "Venus", "Earth", "Mars", "Jupiter", "Saturn", "Uranis", "Neptune", "Pluto"};
List<String> planets = java.util.ArrayList.asList(names);
if (planets.contains("Uranis") ) {
int currentIndex = planets.indexOf("Uranis");
String previousItem = planets.get(currentIndex-1);
// To ensure that we have an element next to the current one.
if (currentIndex < (planets.size() - 1 )) {
String nextItem = planets.get(currentIndex+1);
}
}
我希望这会对你有所帮助
〜Ragesh