我一直在接受这个例外,我不知道如何修复它:
java.lang.ArrayIndexOutOfBoundsException: 3
在while
循环中。这是我的代码:
public class NameSearch {
static String[] names = new String[3];
void populateStringArray() {
names[0] = "Ben";
names[1] = "Thor";
names[2] = "Zoe";
names[3] = "Kate";
}
public static void main(String[] args) {
String pName;
int max = 4;
int current = 1;
boolean found = false;
Scanner scan = new Scanner(System.in);
System.out.println("What player are you looking for?");
pName = scan.next();
while (found == false && current <= max) {
if (names[current] == pName) {
found = true;
} else {
current = current + 1;
}
}
if (found == true) {
System.out.println("Yes, they have a top score");
} else {
System.out.println("No, they do not have a top score");
}
}
}
该代码旨在要求用户输入一个名称,它将检查该名称是否在数组中(简而言之)。
我的IDE(Eclipse)说错误在于if (names[current] == pName){
行。
答案 0 :(得分:2)
下面:
static String[] names = new String[3];
您正在使用三个项目的容量初始化一个数组,而不是最大索引3.要获得包含0,1,2和3的数组,这四个项目,所以你需要像这样初始化数组:
static String[] names = new String[4]; // (0-3)
此外,循环和数组是从零开始的,因此您希望以current
0开始而不是1来循环遍历数组。
此外,最后,您需要在while循环中将<=
切换为<
,因为我们希望它最多只能达到3。
答案 1 :(得分:2)
当您需要在1
和4
(包括)之间对其进行索引时,您正在0
和3
(包括)之间的循环中索引数组元素
将current
更改为0
开始,将max
更改为3
,您应该一切顺利。
对于可能更好的替代方案,请考虑将您的名单列表放在HashSet
中,而不需要进行迭代。 E.g。
Set<String> names = new HashSet<String>();
names.add("Ben");
names.add("Thor");
names.add("Zoe");
names.add("Kate");
if (names.contains(pName)) {
//...
如果名称的排序很重要,那么您可以使用List
代替,contains
方法也有Map
方法(通常效率不如O(n)
实施方式.. O(1)
vs ^(?![IVX.]|[a-z)]).*$
通常)。如果列表中的名称数量很少,或者性能不是问题,那么无论哪种方式都无关紧要。