【发布时间】:2015-12-30 05:11:01
【问题描述】:
知道这条线有什么问题吗? 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)
【问题讨论】:
-
你不会让
size在你 push 的时候变大,所以 pop 总是试图在堆栈中取第 -1 个东西。与其持有一个单独的size变量,不如直接使用s.size()? -
在回答任何问题之前,我会告诉您相信您的 IDE。黄色下划线不是装饰,而是警告:D 您在应该使用泛型的地方使用原始类型
-
但是现在你在实际弹出之前减小了大小。因此,如果堆栈有一个元素,则将大小设置为
0,然后s.remove(size-1)真的是s.remove(-1)... 支持List已经在跟踪它的大小。为什么不相信它? -
@MonaJalal azurefrog 在他最后的评论中有一个公平的观点。它可以防止你在尺寸上犯错误
标签: java string arraylist stack indexoutofboundsexception