gpt4 book ai didi

java - java.lang.ArrayIndexOutOfBoundsException 的原因

转载 作者:行者123 更新时间:2023-12-01 18:11:05 24 4
gpt4 key购买 nike

知道这条线有什么问题吗? outStr[i]=(String) s.pop();

import java.util.ArrayList;
import java.util.Scanner;

public class StringWordReverse {

public String[] StringToWord(){
Scanner sc = new Scanner(System.in);
sc.useDelimiter(" ");
ArrayList<String> wordList= new ArrayList<String>();
String sc_in= sc.nextLine();
String[] sc_split=sc_in.split(" +");
for (int i=0; i<sc_split.length; i++){
wordList.add(sc_split[i]);
}

String[] stringArr= new String[wordList.size()];
for (int i=0; i<wordList.size(); i++){
stringArr[i]= wordList.get(i);
}
return stringArr;


}

public String[] reverseWords(String[] words){
Stack<String> s= new Stack<String>();
String[] outStr=new String[words.length];
for (int i=0; i<words.length; i++){
s.push(words[i]);
}
for (int i=0; i<words.length; i++){
System.out.println(s.stackSize());
outStr[i]=(String) s.pop();
}

return outStr;

}

public static void main(String[] argc){
StringWordReverse swr = new StringWordReverse();


String[] inputWords= swr.StringToWord();
String[] outputWords=swr.reverseWords(inputWords);
for (int i=0; i<outputWords.length;i++)
System.out.println(outputWords[i]);


return;
}



}

这是我的 Stack 类:

    import java.util.ArrayList;

public class Stack<E> {
private ArrayList<E> s = new ArrayList<E>();
private static int size=0;

public void push(E item){
s.add(item);
size++;
return;
}

public E pop(){
size--;
return s.remove(size-1);

}

public int stackSize(){
return size;
}


}

这是我收到的错误:

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
at java.util.ArrayList.elementData(ArrayList.java:400)
at java.util.ArrayList.remove(ArrayList.java:477)
at XYZ.Stack.pop(Stack.java:16)
at XYZ.StringWordReverse.reverseWords(StringWordReverse.java:35)
at XYZ.StringWordReverse.main(StringWordReverse.java:47)

最佳答案

这段代码中的一些错误:

  • 您使用原始类型而不是泛型。让编译器帮助您解决(大多数)运行时类型错误:Stack<String> stack = new Stack<>()

  • Stack.pop ,你永远不会检查是否有要弹出的元素。您应该测试它并抛出异常,例如 NoSuchElementException如果堆栈为空。

  • Stack.pop ,您正在减小大小,然后删除项目 size - 1 ,所以你基本上减少了两次。这应该是:s.remove(--size);

关于java - java.lang.ArrayIndexOutOfBoundsException 的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32899579/

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