gpt4 book ai didi

java - 错误的越界异常

转载 作者:可可西里 更新时间:2023-11-01 10:22:04 25 4
gpt4 key购买 nike

因此,我从文本文件中检索了一行并将其作为一个字符串存储在字符串数组中,我将其命名为 inventorylist[i]。然后,我使用 .split("") 拆分它,并将其中的标记存储在名为 invlistTokens 的数组中。当我对该 token 数组执行任何操作时,它会抛出一个越界异常。如果我将它放在一个 forloop 中以显示我期望的 5 个标记,它将成功读取它们然后抛出该异常。

    public static item[] loadInv(){
String inventoryname = "Henderson_j_inv.txt";
String[] inventorylist= new String[50]; //more than enough room for the file to load in
String[] invlistTokens = new String [5];
item[] inventory = new item[50];

try {
ReadFile file = new ReadFile(inventoryname);
inventorylist = file.OpenFile();
} catch (IOException e) {
System.out.print("FILE FAILED TO LOAD");
}

for(int i=0; i< Array.getLength(inventorylist); i++){
System.out.println(inventorylist[i]);//This always succeeds
invlistTokens=inventorylist[i].split(" ");

for(int j=0; j<5; j++){ //This is the weird ForLoop. It completes and then java throws out of bounds.
System.out.println(invlistTokens[j]);
}
}

请原谅我乱七八糟的帖子,这是我的第一篇帖子,我不确定我能对这样一个奇怪的错误说得有多具体

Eclipse 截图:http://imgur.com/ssArryd

Eclipse Screenshot

我确实在我的实际代码中得到了正确的变量,只是在将 forloop 添加到帖子时恰好是一个虚拟变量

这是实际的异常,除了我知道它超过了 1。循环在它抛出之前完成了所有 5 次运行。

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1
at shopping2.loadInv(shopping2.java:50)
at shopping2.main(shopping2.java:23)

所以我把代码改成了这样

public static item[] loadInv(){
String inventoryname = "Henderson_j_inv.txt";
String[] inventorylist= new String[50];
String[] invlistTokens = new String [100];
item[] inventory = new item[50];

try {
ReadFile file = new ReadFile(inventoryname);
inventorylist = file.OpenFile();
} catch (IOException e) {
System.out.print("FILE FAILED TO LOAD");
}

System.out.print(inventorylist.length); //This displays 19, when it should be giving me 10 based on my file

for(int i=0; i< inventorylist.length; i++){
//System.out.println(inventorylist[i]);
invlistTokens=inventorylist[i].split(" ");
System.out.println(invlistTokens.length); //This alternates between 5 and 1


}

所以我认为问题出在我的 txt 文件或我的阅读器类中。感谢大家的帮助。

最佳答案

我们在堆栈跟踪之前看到两个 \nSystem.out.println() 似乎用空字符串调用了两次。

所以看起来在 i 的第二次迭代中,inventorylist[i] 是一个空字符串。所以 .split("") 返回一个单元素数组,在索引 0 处有一个空字符串。

这就是为什么在 j 的第二次迭代中,您在索引 1 处有一个 ArrayIndexOutOfBoundsException

关于java - 错误的越界异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26033234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com