Любая идея, что не так с этой линией? outStr[i]=(String) s.pop();
Причина для java.lang.ArrayIndexOutOfBoundsException
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' больше, когда вы нажимаете, поэтому pop всегда пытается взять -1-ю вещь в стеке. Вместо того, чтобы содержать отдельную переменную 'size', почему бы просто не использовать' s.size() '? – azurefrog
Прежде чем отвечать на все, я бы сказал вам доверять своей среде IDE. Желтая подчеркивание - это не украшение, это предупреждение: D Используете необработанные типы, где вы должны использовать генераторы – Dici
Но теперь вы уменьшаете размер, прежде чем на самом деле появляетесь. Поэтому, если в стеке есть один элемент, вы задаете размер '0', а затем' s.remove (size-1) 'действительно' s.remove (-1) '... Поддержка« List »уже отслеживает его размера. Почему бы ему не доверять? – azurefrog